データ分析や機械学習で欠かせないライブラリ Pandas
。
その中でも、大量のデータから特定の条件に合致する行を抽出する方法は非常に重要です。
本記事では、Pandas
における query()
メソッドを使って、条件に合う行を簡単に抽出する方法をわかりやすく解説します。
そもそも「query()」って何?
query()
は、DataFrameから条件に一致するデータを抽出するためのメソッドです。
SQLのような感覚で条件式を書けるため、コードが直感的で読みやすくなるのがメリットです。
基本の使い方
構文
DataFrame.query('条件式')
「query」を用いることで列の値に対して条件式を設定することで容易に抽出することが可能です。
使用例(単一条件)
import pandas as pd
# データフレームの作成
f = pd.DataFrame({
"num": [0, 1, 2, 3, 4, 5],
"type": ["m", "f", "m", "f", "f", "m"],
"flag": ["_", "|", "_", "|", "|", "_"]
})
# num列が2の行を抽出
print(f.query('num == 2'))
出力結果
flag num type
2 _ 2 m
このように query('num == 2')
と記述するだけで、num列が2の行だけを抽出することができます。
使用例(複数条件)
複数条件のAND(かつ)
f.query('type == "f" and flag == "|"')
type
が"f"
- かつ
flag
が"|"
という条件に一致する行を抽出します。
複数条件のOR(または)
f.query('num < 2 or flag == "_"')
num
が2未満 またはflag
が"_"
よくある注意点
Python変数をそのまま使えない?
query() の中では文字列で条件を書きますが、Pythonの変数を使う場合は @変数名
のように書く必要があります。
threshold = 3
f.query('num > @threshold')
上記のように「@」をつけることで、変数の値を使うことができます。
よくあるエラーと対策
エラー | 原因 | 対処方法 |
---|---|---|
NameError | 条件式に定義されていない変数名を使っている | カラム名が正しいか確認し、変数は「@」をつける |
ValueError | query() に渡した条件式が文字列でない | 条件式は必ず「”」で囲む |
SyntaxError | 特殊文字や空白による文法エラー | 列名に空白や記号がある場合はバッククォートで囲む(例:f.query(" my column > 5") ) |
CSVファイルに使う例
実際にCSVファイルを読み込んだ際に使うと非常に便利です。
df = pd.read_csv("sales_data.csv")
# 2023年のデータだけ抽出
filtered = df.query('year == 2023')
# 男性かつ売上が100以上
high_sales = df.query('gender == "male" and sales >= 100')
まとめ
特徴 | 内容 |
---|---|
見やすさ | SQLライクな書き方で簡潔に書ける |
柔軟性 | 複数条件・変数との連携も可能 |
実用性 | データ分析・可視化の前処理で重宝する |
関連記事
ワンポイント
query()
はシンプルで読みやすい一方で、複雑なロジックや関数を含む条件には不向きな場面もあります。そのようなときは、通常の df[df['col'] > 10]
のような書き方と使い分けるのがコツです。