【初心者向け】PandasでDataFrameから条件に合う列を抽出!query()メソッドの使い方

Python

データ分析や機械学習で欠かせないライブラリ Pandas
その中でも、大量のデータから特定の条件に合致する行を抽出する方法は非常に重要です。

本記事では、Pandas における query() メソッドを使って、条件に合う行を簡単に抽出する方法をわかりやすく解説します。

この記事でわかること
  • 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条件式に定義されていない変数名を使っているカラム名が正しいか確認し、変数は「@」をつける
ValueErrorquery() に渡した条件式が文字列でない条件式は必ず「”」で囲む
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] のような書き方と使い分けるのがコツです。

タイトルとURLをコピーしました