Python - DataFrameで任意のデータ抽出

DataFrameでは任意のデータを容易に抽出することができます。

キーでのデータ抽出

まず1次元のリストが入った辞書型データよりデータフレームを作成します。

このデータに対して、キーを指定することにより任意の列のデータを取得することができます。

[コード]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import pandas as pd

# 身長・体重・性別のデータフレームを作成
tbl = pd.DataFrame({
'weight': [80.0, 70.4, 65.5, 45.9, 51.2, 72.5],
'height': [170, 180, 155, 143, 154, 160],
'gender': ['f', 'm', 'm', 'f', 'f', 'm']
})

# 体重の一覧を表示
print('体重の一覧')
print(tbl['weight'])
print()

# 体重と身長の一覧を表示
print('体重と身長の一覧')
print(tbl[['weight', 'height']])

実行結果は下記のとおりです。

[実行結果]

体重の一覧
0    80.0
1    70.4
2    65.5
3    45.9
4    51.2
5    72.5
Name: weight, dtype: float64

体重と身長の一覧
   weight  height
0    80.0     170
1    70.4     180
2    65.5     155
3    45.9     143
4    51.2     154
5    72.5     160

スライスでのデータ抽出

任意の行を抽出したい場合は、Pythonの標準型であるリストを同じようにスライスを使うことができます。

[コード]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import pandas as pd

# 身長・体重・性別のデータフレームを作成
tbl = pd.DataFrame({
'weight': [80.0, 70.4, 65.5, 45.9, 51.2, 72.5],
'height': [170, 180, 155, 143, 154, 160],
'gender': ['f', 'm', 'm', 'f', 'f', 'm']
})

# (0から数えて)2から3つ目のデータを表示
print('tbl[2:4]\n', tbl[2:4])
print()

# (0から数えて)3つ目以降のデータを表示
print('tbl[3s:]\n', tbl[3:])

実行結果は下記のとおりです。

[実行結果]

    weight  height gender
2    65.5     155      m
3    45.9     143      f

    weight  height gender
3    45.9     143      f
4    51.2     154      f
5    72.5     160      m

条件でのデータ抽出

条件を指定することにより、条件に合致したデータを抽出することができます。

[コード]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import pandas as pd

# 身長・体重・性別のデータフレームを作成
tbl = pd.DataFrame({
'weight': [80.0, 70.4, 65.5, 45.9, 51.2, 72.5],
'height': [170, 180, 155, 143, 154, 160],
'gender': ['f', 'm', 'm', 'f', 'f', 'm']
})

print('身長が160以上のデータを表示')
print(tbl[tbl.height >= 160])
print()

print('性別が m のデータを表示')
print(tbl[tbl.gender == 'm'])

実行結果は下記のとおりです。

[実行結果]

身長が160以上のデータを表示
   weight  height gender
0    80.0     170      f
1    70.4     180      m
5    72.5     160      m

性別が m のデータを表示
   weight  height gender
1    70.4     180      m
2    65.5     155      m
5    72.5     160      m