Python Coding Reference — 4-2. pandas(DataFrame) —

4. データの参照

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

2021-12-10

Posted by tfurukaw