はじめに
今回は、query()メソッドを扱います。query()メソッドは、pandas.DataFrameのメソッドで、条件に合致したデータを取り出すときに使います。角括弧にブール値のリストを指定するよりも簡単に詳細な条件を指定することができます。
サンプルデータ
以下のコードでサンプルデータを作りましょう。今回はquery()メソッドでいろんな条件を指定できるように会員Noの列を追加しています。
# ライブりのインポート
import pandas as pd
# サンプルデータの作成
df_sample=pd.DataFrame({
'会員No':['C000023','C000032','Z000018','Z000021','C000023','Z000018','C000018','C000018','C000031','Z000032'],
'なまえ':['らくだ','らいおん','ぱんだ','しまうま','きりん','うさぎ','ねこ','いぬ','おおかみ','かば'],
'動物園':['上野動物園','旭山動物園','上野動物園','こどもどうぶつえん','ズーラシア','ズーラシア','旭山動物園','旭山動物園','ズーラシア','こどもどうぶつえん'],
'年齢':[23,32,18,21,23,18,18,18,31,32]
})
df_sample
query()メソッド
では、ここからquery()メソッドをみていきましょう。まず、数値に関する条件であれば、次のように列名に対して直接、条件を記述します。
df_sample.query('年齢>25')
次のように複数の条件を記述することもできます。年齢が25歳より大きくて、偶数であるデータを抽出。
df_sample.query('年齢>25 & 年齢%2==0 ')
これだけみても、角括弧による条件指定よりはるかに簡単ですね。次に文字列に関する条件指定もみていきましょう。文字列の場合は文字列メソッドstr.XXX()を使います。
contains()
ある文字列を含む、という条件はcontains()を使います。以下のコードでは、engine=’python’を記述していますが、環境によってはこの記述がなくても動きます。(numuexprがインストールされている場合は、defaultでこのエンジンが使われるので、明示的にpythonを指定する必要があります。)
df_sample.query(‘動物園.str.contains(“どうぶつ”)’,engine=’python’)
startswith()
次に文字列の先頭に関する条件指定です。先頭が〇〇で始まるもの、はstartswith()で指定します。
df_sample.query('会員No.str.startswith("Z")',engine='python')
endswith()
今度は、逆に〇〇で終わる、という条件でデータを抽出します。endswith()を使います。「〇〇動物園」と、「動物園」で終わるものを抽出してみましょう。
df_sample.query('動物園.str.endswith("動物園")',engine='python')
正規表現
正規表現を使うこともできます。先ほどの、startswith()とendswith()と同じ条件を正規表現で抽出してみましょう。
df_sample.query('会員No.str.contains("^Z")',engine='python')
df_sample.query('動物園.str.contains("動物園$")',engine='python')
まとめ
いかがでしたか?query()メソッドを使うと、条件指定の表現が広がります。正規表現まで使えるため、かなり複雑な条件抽出も可能となります。是非、身につけるようにしてください。
コメント