見出し画像

Python Pandas DataFrame データ抽出

Pandasで生成したデータフレームから必要なデータを抽出するときによく使う方法を列挙する。

モジュールインポート

print("実行環境")
import pandas as pd
import numpy as np
!python -V
print('pandas ' + pd.__version__)
print('numnpy ' + np.__version__)
実行環境
Python 3.8.12
pandas 1.3.4
numnpy 1.21.2
# 出力時の表示を指定の数値以下にする
pd.set_option('display.max_rows', 10)
# データの準備
csv_data = pd.read_csv('iris_test.csv')
csv_data

列名、行名(index)指定でデータ抽出

列名指定で列抽出 単列

csv_data.petal_width
0      0.2
1      0.2
2      0.2
3      0.2
4      0.2
      ... 
145    2.3
146    1.9
147    2.0
148    2.3
149    1.8
Name: petal_width, Length: 150, dtype: float64

列名指定で列抽出 複数列

csv_data[['sepal_width', 'petal_width']]

行名(index)で行抽出

csv_data[1:4]

行、列の両方をラベル名で抽出 loc

上で書いた行名、列名指定の抽出も含めて、すべてlocで対処が可能。

#単一データ
csv_data.loc[1,'sepal_width'] #[行名(index), 列名]
3.0
#複数データ
csv_data.loc[1:4,['sepal_width', 'petal_width']]
# 単一行を列として抽出
csv_data.loc[1,:]
sepal_length       4.9
sepal_width        3.0
petal_length       1.4
petal_width        0.2
variety         Setosa
Name: 1, dtype: object

行、列の両方を番号で抽出 loc

csv_data.iloc[5:15,1:3]

条件指定でデータ抽出

データ抽出 基本のフィルター設定

# 列'variety'の値が'Setosa'の行を抽出
csv_data[csv_data['variety']  == 'Setosa']
# 列'sepal_length'の値が5より大きい行を抽出
csv_data[csv_data['sepal_length']  > 5]

データ抽出 isinの利用

# 列'variety'の値が'Setosa''Versicolor'の行を抽出
csv_data[csv_data['variety'].isin(['Setosa', 'Versicolor'])]

いいなと思ったら応援しよう!