Python初心者でも簡単に使える!Pandas Queryの使い方徹底解説

「query」の使い方 Pandas

Pythonを使ったデータ分析といえば、多くの人が「Pandas」を思い浮かべるでしょう。

Pandasは非常に強力で、データの操作や分析において欠かせないライブラリです。

ゆーや
ゆーや

作成したデータフレームから条件に合った値を取得したいけど
どうすればいいの…

そんな悩みをお持ちの方に向けて、

今回は、特にその中でもデータ抽出に便利な query() メソッド に焦点を当てて、効率的にデータを扱う方法を解説していきます。

Pandas Queryとは?

Pandasの query() メソッドは、データフレーム(DataFrame)の行をフィルタリングするための関数です。

通常、データのフィルタリングにはブールインデックス .loc[] を使いますが、 query() を使うと、SQLのような直感的な書き方ができるため、可読性が向上します。

ゆーや
ゆーや

SQLに慣れている方は、queryを使うとコードがスッキリするよ!
より複雑で柔軟な条件指定をしたい場合は、locがオススメ!
次の記事で丁寧に解説しているので是非ご覧ください!

Pandas Queryの基本構文

query() メソッドの基本構文は以下の通りです。

DataFrame.query('条件式', inplace=False)
ゆーや
ゆーや

‘条件式’: フィルタリングの条件を指定します。SQLのWHERE句に似ています。
inplace: デフォルトは False です。 True にすると、元のDataFrameが変更されます。

Pandas Queryの基本的な使い方

単純なフィルタリング

import pandas as pd

# サンプルデータを作成
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'Age': [24, 30, 18, 25, 40],
    'City': ['Tokyo', 'Osaka', 'Tokyo', 'Nagoya', 'Osaka']
}

# データフレームの作成
df = pd.DataFrame(data)

# 年齢が30以上のデータを抽出
result = df.query('Age >= 30')

# 出力
print(result)
ゆーや
ゆーや

このように書くと、SQL文を使っているかのようにシンプルで読みやすいですね!

複数条件のフィルタリング

import pandas as pd

# サンプルデータを作成
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'Age': [24, 30, 18, 25, 40],
    'City': ['Tokyo', 'Osaka', 'Tokyo', 'Nagoya', 'Osaka']
}

# データフレームの作成
df = pd.DataFrame(data)

# 年齢が25以上かつ東京に住んでいる人を抽出
result = df.query('Age >= 20 and City == "Tokyo"')

# 出力
print(result)

ここでは、 and or を使って複数の条件を指定できます!

Pythonでは通常 & や | で条件を組み合わせますが、 query() では自然言語に近い書き方が可能です!

変数を使ったクエリ

import pandas as pd

# サンプルデータを作成
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'Age': [24, 30, 18, 25, 40],
    'City': ['Tokyo', 'Osaka', 'Tokyo', 'Nagoya', 'Osaka']
}

# データフレームの作成
df = pd.DataFrame(data)

# 条件
age = 20
city = 'Osaka'

# 変数を使ってデータをフィルタリング
result = df.query('Age > @age and City == @city')

# 出力
print(result)
ゆーや
ゆーや

ここで、 @ 記号を使うことで、Pythonの変数をクエリ内で利用できます。

特殊文字の扱い

列名にスペース特殊文字が含まれている場合、バッククォート( `で囲む必要があります。

import pandas as pd

# サンプルデータを作成
data = {
    'Employee Name': ['Alice', 'Bob', 'Charlie'],
    'Salary': [50000, 60000, 45000]
}

# データフレームの作成
df = pd.DataFrame(data)

# スペースを含む列名を使用
result = df.query('`Employee Name` == "Bob"')

# 出力
print(result)

まとめ

Pandasの query() メソッドは、データフィルタリングをシンプルかつ効率的に行うための便利なツールです。

特に、SQLライクな構文でフィルタリングを行いたい場合や、ブールインデックスの書き方が複雑になる場合に役立ちます。

データ分析や機械学習の前処理で多くの時間を節約できるため、ぜひ積極的に活用してみてください!

コメント

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