[Python #18]pandas queryメソッドの使い方
こんにちは、pythonチームのK.Iです。
先日、csvの中から条件に該当する項目を数える業務がありました。
少し複雑な条件だったのでpythonで軽くコード組むか〜といった感じで書いていたわけですよ。
私の頭の中で”条件に該当する個数を数える” = "for文を使って数えればいいんだ"と閃いたので
長々とfor文の繰り返しを書きました。
↓こんな感じです。
count = 0
for i in range(len(df)):
if df[column][i] >= 20:
count += 1
else:
pass
もちろんこの方法でも集計できます。
ですが、書き終えてみてfor文を使用しなくてもpandasにメソッドあるのでは?と思って
Google先生に聞いってみたらqueryメソッドを教えてくれました。
このような経緯から、今回はpandasライブラリのqueryメソッドについてご紹介したいと思います。
queryメソッドとは?
pandasライブラリのqueryメソッドは条件に該当するものを抽出してくれます。
例えば↓のようなデータフレームがあったとします。
name height weight gender
0 Alice 160 55 w
1 Bob 180 70 m
2 Chris 170 65 m
3 Danieelle 175 60 m
4 Emma 165 50 w
この中でheightが165以上の人は誰であるかを知りたいと思った時、queryメソッドを使えば簡単に抽出してくれます。
データフレームの準備
まずはcsvを作成するところから始めます。
csvの作成方法については[Python #16] pandasでcsvファイルを扱うをご参照ください。
import pandas as pd
df = pd.DataFrame(
data={
'name': pd.Series(["Alice","Bob","Chris","Danielle","Emma"]),
'height': pd.Series([160, 180, 170, 175,165]),
'weight': pd.Series([55,70,65,60,50]),
'gender': pd.Series(['w','m','m','m',"w"])})
df.to_csv("sample.csv",index=False)
csv作成ができました。
次はcsvの読み込みです。読み込んでいただいてprintしていただくと以下のようになると思います。
df = pd.read_csv("sample.csv")
print(df)
"""
name height weight gender
0 Alice 160 55 w
1 Bob 180 70 m
2 Chris 170 65 m
3 Danielle 175 60 m
4 Emma 165 50 w
"""
実際にqueryメソッドを使ってみる
queryメソッドを使ってみます。
まず初めに"Alice","Bob","Chris","Danielle","Emma"の中でheightが165以上の人は誰なのか抽出していきたいと思います。
print(df.query('height >= 165'))
"""
name height weight gender
1 Bob 180 70 m
2 Chris 170 65 m
3 Danielle 175 60 m
4 Emma 165 50 w
"""
また、queryメソッドは複数条件でも絞り込むことができます。
print(df.query('height >= 165 and weight<=60'))
"""
name height weight gender
3 Danielle 175 60 m
4 Emma 165 50 w
"""
print(df.query('height >= 165 & weight<=60 & gender == "w"'))#"and"は"&"でも使えます。
"""
name height weight gender
4 Emma 165 50 w
"""
抽出する方法にはandだけではなくorやnot などもあるので色々試していただければと思います。
おわりに
今回はデータフレームから条件の抽出するqueryメソッドをご紹介しました。
次回以降に集計することがあればqueryメソッドで抽出したものを確認したのちに
len()を使って集計しようと思います。
print(len(df.query('height >= 165 and weight<=60')))
#2