4-3. pandas(DataFrame)-データ参照
import pandas as pd
df[]の中に与える値の種類によって取得できる値の種類が異なる * 列:文字列('val')、リスト['key','val'] * 行:スライス(1:3)
4-1. 列名指定
リスト・文字列を使用した列の参照
df = pd.DataFrame([['a', 10], ['b', 20], ['c', 30], ['d', 40], ['e', 50], ['f', 60]], columns=['key', 'val'])
key列のみ取得
列名は文字列で指定
>>> df['key']
0 a
1 b
2 c
3 d
4 e
5 f
Name: key, dtype: object
key, val列のみ取得(boolIndex)
複数の列名はリストで指定
>>> df[['key', 'val']]
key val
0 a 10
1 b 20
2 c 30
3 d 40
4 e 50
5 f 60
key, val列のみ取得(loc)
>>> df.loc[:, ['key', 'val']]
key val
0 a 10
1 b 20
2 c 30
3 d 40
4 e 50
5 f 60
val列のみ取得(iloc)
>>> df.iloc[:, 1]
0 10
1 20
2 30
3 40
4 50
5 60
Name: val, dtype: int64
4-2. 行指定
スライスを使用した行の参照
1行目のみ取得
スライスに与える値はインデックスを示す。後の値(下記の例で言う"1"のインデックスを持つ行)は含まない。
>>> df[0:1]
key val
0 a 10
2行目以降を取得
>>> df.loc[1:, :]
key val
1 b 20
2 c 30
3 d 40
4 e 50
5 f 60
1行目と2行目を取得
>>> df.loc[[0,1], :]
key val
0 a 10
1 b 20
2行目のみ取得
>>> df.iloc[1, :]
key b
val 20
Name: 1, dtype: object
4-3. 値参照
行・列の双方を指定した値の取得(2行目のval列の値を取得)
>>> df[1:2]['val']
==> 1 20
==> Name: val, dtype: int64
2行目のkey列の値
>>> df.at[1, 'key']
'b'
2行目のval列の値
>>> df.at[1, 'val']
20
2行目の2列目(val)列の値
>>> df.iat[1, 1]
20
3行目の1列目(val)列の値
>>> df.iat[2, 0]
'c'
エラーとなる指定の仕方
print(df[1,2])
print(df[[1,2]])
print(df[1])
print(df['key','val'])
4-4. 先頭行と末尾行の取得
先頭5行取得
df.head()
==> key val
==> 0 a 10
==> 1 b 20
==> 2 c 30
==> 3 d 40
==> 4 e 50
先頭2行取得
df.head(2)
==> key val
==> key val
==> 0 a 10
==> 1 b 20
末尾5行取得
df.tail()
==> key val
==> 1 b 20
==> 2 c 30
==> 3 d 40
==> 4 e 50
==> 5 f 60
4-5. 条件によるデータの抽出
BoolIndexによる取得
df[df['val']==20]
==> key val
==> 1 b 20
※「df['val']==20」部分だけだと、Key=2の行だけTrue、それ以外の行はFalseとなり、結果は以下の通り。
print(df['val']==2)
==> 0 False
==> 1 True
==> 2 False
==> 3 False
==> 4 False
==> 5 False
==> Name: val, dtype: bool
そのため、TrueであるIndex=1の行だけ抽出される
文字列の場合も、同様に下記のような結果が取得される
df[df['key']=='c']
==> key val
==> 2 c 30