はじめに
pandasで無数のデータを扱う場合、条件を満たす値だけを取り出す必要がある
例えば、一定の費用以上のプロジェクトだけを探したい時、一定期間の日付のリストを探したい時、などなど
ここではpandas でqueryを用いて必要な値を持つデータフレームに絞ることを紹介する
前回の記事
[python] 複雑なエクセルデータをpandasで処理する
環境
python 3.7.8
window 10
Code
import pandas as pd
df = pd.read_excel('./data.xlsx')
df
単一条件
一つの列にたいしての条件でデータを絞ることができる。
変数名で抽出
Name列がTanakaである
df.query("Name == 'Tanaka'")
Class列がBではない
df.query('Class != "B"')
変数の範囲で抽出
Point列が50より高い
df.query('Point > 50')
Point列が90である
df.query('Point == 90')
インデックスの範囲で抽出
インデックスが2以上である
df.query('index >= 2')
インデックスが偶数である
df.query('index%2 == 0')
複数条件
変数の条件で抽出
Point列が50以上 または Class列がBである
df.query('Point >= 50 or Class == "B"')
Point列が50以上 かつ Class列がBである
df.query('Point >= 50 and Class == "B"')
Point列が50以上 かつ 60より小さい値である
df.query(' 50 <= Point < 60')
リストの中の値を持つ条件
Class列に"A" 、"B"を含む
df.query('Class in ["A", "B"]')
df.query('Point in [90, 55]')
Class列に90、55を含まない
df.query('Point not in [90, 55]')
変数を使用した条件
変数の前に@につけて用いる
x = 90
df.query('Point == @x')
y = [50, 30]
df.query('Point in @y')
まとめ
pandas の queryを用いることによってデータフレームのほとんどは値を絞ることができる。
前回でも紹介したように、複雑なデータでもとりあえずデータフレームの行列の形にできてしまえば、条件付きでより洗練されたデータを得ることができる。