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ライクな構文でフィルタリングを行いたい場合や、ブールインデックスの書き方が複雑になる場合に役立ちます。
データ分析や機械学習の前処理で多くの時間を節約できるため、ぜひ積極的に活用してみてください!
コメント