pandasでデータを絞り込むとき、
これまで紹介してきたように df[...] の形を使うことが一般的です。
たとえば、特定の条件に一致する行を取り出す場合、
次のような書き方をしていました。
Python
df[df[“sales”] > 100]
Show more lines
この書き方は基本としてとても重要ですが、
条件が複雑になると少し読みにくくなることがあります。
そこで使えるのが query です。
queryを使うと、条件式を「文字列」として書くことで、
よりシンプルに絞り込みを表現できるようになります。
pandasの導入記事はこちら。
Python入門:pandasの基本をやさしく解説(データ操作の超入門) – Lean Data Office
mergeは「列を基準に結合する」
queryとは何か
query は、データフレームに対して
条件を指定して行を絞り込むための機能です。
特徴は、条件を文字列として書く点にあります。
そのため、コードというよりは「式」に近い形で
直感的に条件を書くことができます。
サンプルデータ
まずはいつも通りデータを用意します。
Python
import pandas as pd
data = {
“name”: [“A”, “B”, “C”, “D”],
“country”: [“JP”, “US”, “JP”, “UK”],
“sales”: [100, 200, 150, 300]
}
df = pd.DataFrame(data)
Show more lines
基本的な使い方
売上が100より大きいデータを取り出す場合、
queryでは次のように書きます。
Python
df.query(“sales > 100”)
Show more lines
この書き方を見ると分かる通り、df["sales"] のような書き方は不要になり、
列名をそのまま使えるようになります。
従来の書き方との違い
同じ処理を従来の方法で書くと次のようになります。
Python
df[df[“sales”] > 100]
Show more lines
この2つを比べると、queryの方が
「条件そのもの」に集中して書けていることが分かります。
特に条件が長くなるほど、この差は大きくなります。
複数条件の扱い
条件が複数になると、queryの読みやすさがよりはっきりします。
たとえば、日本かつ売上150以上のデータを取り出す場合です。
Python
df.query(“country == ‘JP’ and sales >= 150”)
Show more lines
このように、and や or をそのまま使えるため、
自然な文章に近い形で条件を書くことができます。
一方で従来の書き方では、演算子やカッコが増えてしまいます。
Python
df[(df[“country”] == “JP”) & (df[“sales”] >= 150)]
Show more lines
この違いは、条件が増えるほど大きく感じられるようになります。
文字列を条件に使うときの注意
queryでは条件全体が文字列になるため、
文字列の値はクォーテーションで囲む必要があります。
Python
df.query(“country == ‘JP'”)
Show more lines
ここを忘れるとエラーになるため、
最初のうちは注意が必要です。
変数を使う方法
実務では、条件の値が固定ではないこともよくあります。
その場合は、@ を使って外部の変数を参照します。
Python
target = 150
df.query(“sales >= @target”)
Show more lines
このように書くことで、
コードの外で定義した値を条件に組み込むことができます。
なぜqueryを使うのか
queryの一番のメリットは、
「読みやすさ」と「保守性」にあります。
データ処理のコードは、あとから見返したり、
他の人が読む機会が多くあります。
そのときに、
Python
(df[“country”] == “JP”) & (df[“sales”] >= 150)
Show more lines
よりも、
Python
“country == ‘JP’ and sales >= 150”
Show more lines
の方が、意図をすぐに理解しやすくなります。
特に分析処理では、条件の意味が重要になるため、
この差は意外と大きくなります。
使い分けの考え方
ただし、queryが常に優れているわけではありません。
単純な条件であれば、従来の書き方でも問題ありませんし、
慣れている環境ではその方が書きやすい場合もあります。
そのため、
- 条件がシンプルな場合は従来の書き方
- 条件が複雑な場合や読みやすさを重視する場合はquery
このように使い分けると自然です。
まとめ
queryは、条件を文字列として書くことで、
データの絞り込みをよりシンプルに表現できる機能です。
基本的な動きは従来の df[...] と同じですが、
条件が複雑になるほど、その書きやすさと読みやすさが活きてきます。
最初は少し違和感があるかもしれませんが、
実務での可読性を意識すると非常に有用な方法です。
まずは簡単な条件から使い始めて、
徐々に複雑な条件に広げていくと理解しやすくなります。