pandasにおけるデータの取り出し方についてメモ。
DataFrame型に絞ります。
都度更新して行きます。
1.columnの指定
DataFrame型のデータに対して、カラム名を指定することでそのカラムに属するデータを抽出できる。
columnの指定
import pandas as pd
sample = pd.DataFrame({'A':[1,4,6],'B':[2,5,7],'C':[3,6,8]})
sample
sample['A']
→ sample
A | B | C | |
---|---|---|---|
0 | 1 | 2 | 3 |
1 | 4 | 5 | 6 |
2 | 6 | 7 | 8 |
→ sample['A']
A | |
---|---|
0 | 1 |
1 | 4 |
2 | 6 |
また、複数のカラム名を指定してデータを抽出することも可能。
ただし、その場合抽出されるデータが二次元となるため、
[ ] を一段増やすことを忘れてはいけない。
複数のカラム指定
sample[['A','B']]
A | B | |
---|---|---|
0 | 1 | 2 |
1 | 4 | 5 |
2 | 6 | 7 |
2.iloc系による抽出
iloc
カラム名ではなく、行列の要素番号を指定してデータを抽出する場合には iloc を用いる。
ilocによる抽出
sample.iloc[[1],[2]] #1行目の2列目(0行目、0列目があることに注意)、を指定
sample.iloc[:,1:] #全ての行の1列目以降、を指定
sample.iloc[[1]] #1行目を指定
→ sample.iloc[[1],[2]]
C | |
---|---|
1 | 6 |
→ sample.iloc[:,1:]
B | C | |
---|---|---|
0 | 2 | 3 |
1 | 5 | 6 |
2 | 7 | 8 |
→ sample.iloc[[1]]
A | B | C | |
---|---|---|---|
1 | 4 | 5 | 6 |
loc
要素番号ではなく、列名または行名を用いてデータを抽出する場合には loc を用いる。
なおsampleでは行名が[0, 1, 2 ]となっているが、これはindexではなく名前だと認識する。
locによる抽出
sample.loc[[0], ['A']] #「0」という名の行のA列
sample.loc[[2], ['C']] #「2」という名の行のC列
sample.loc[[1]] #「1」という名の行を指定
- → sample.loc[[0] , ['A']]*
A | |
---|---|
0 | 1 |
- → sample.loc[[2] , ['C']]*
C | |
---|---|
2 | 8 |
→ sample.loc[[1]]
A | B | C | |
---|---|---|---|
1 | 4 | 5 | 6 |
ix
要素番号、カラム名のいずれも使用してデータを抽出する場合には ix を用いる。
ixによる抽出
sample.ix[[2],[2]]
sample.ix[[0],1:]
→ sample.ix[[2],[2]]
C | |
---|---|
2 | 8 |
→ sample.ix[[0],1:]
B | C | |
---|---|---|
0 | 2 | 3 |
iloc,loc,ix まとめ
- ilocは index を用いてデータを抽出する
- locは 列名または行名 を用いてデータを抽出する
- ixは index,列名,行名 の両方を用いて(あるいは一方だけを用いて)データを抽出する
抽出に成功するパターンと失敗するパターン
iloc,loc,ixにおける成功と失敗パターン
sample.iloc[[0],[0]] #成功
sample.iloc[[0],['A']] #失敗。iloc はindex(要素番号)でしかアクセスできない
sample.loc[[0],['A']] #成功
sample.loc[[0],[0]] #失敗。loc は名前でしかアクセスできない
sample.ix[[0],[0]] #成功
sample.ix[[0],['A']] #成功