はじめに
今回はpandas データフレームから条件に合致した行を抽出する方法をおさらいします。真偽値を使った方法では、変数に条件を代入する方法についても紹介します。条件を変数に入れてしまうことで、条件を変更していろいろ試すのが簡単になります。最後にquery関数を使った方法についても復習しておきましょう。
サンプルデータを作る
今回は前回と同じデータを使用することにしましょう。どうぶつたちの月間の購入回数のデータです。
サンプルデータは以下のコードでつくります。
# ライブラリのインポート import pandas as pd import random import numpy as np import datetime as dt from dateutil.relativedelta import relativedelta # どうぶつのリスト animals=['らくだ','ねこ','ぞう','らいおん','うさぎ','きりん'] animal_list=[animal for animal in animals for i in range(12)] # 月リスト date_list=[(dt.datetime(2020, 4, 1) + relativedelta(months=i)) for i in range(12)] month_list=[str(date.month)+'月' for date in date_list ] # 購入回数データ data=np.array([random.randint(1, 3) for i in range(72)]) base=[3,3,1,2,1,2] base_list=[i for i in base for j in range(12)] # データフレームを作成 zoo_data=pd.DataFrame({'購入月':month_list*6, 'どうぶつ':[animal for animal in animals for i in range(12)], '購入回数':data+base_list}) zoo_data.head()
データを作る過程を知りたい場合は以下の投稿をどうぞ。
条件に合った行を抽出する
真偽値を使ったデータ抽出
真偽値を使ったデータ抽出は、角括弧の中に真偽値を指定します。ここでは、購入回数が6回である行を抽出してみましょう。真偽値は、作成したデータフレーム「zoo_data」の「購入回数」列が6に等しいかどうかなので、次のようにすると真偽値を得ることができます。
zoo_data['購入回数']==6
このようにデータフレームの各行が条件に合致するかどうか、がTrue/Falseの真偽値で得られます。これを用いてデータフレームから行を抽出するには角括弧にこの真偽値を指定して次のようにします。
zoo_data[zoo_data['購入回数']==6]
条件にあったデータを抽出することができました。条件が複数あるときには、それぞれの条件を()で囲んで論理演算子でつなぎます。たとえば、「購入回数が6回」且つ「らくだ」のデータを抽出してみましょう。
zoo_data[(zoo_data['購入回数']==6)&(zoo_data['どうぶつ']=='らくだ')]
今回はand条件だったので「&」でつなぎました。or条件なら「|(パイプ)」でつなぐだけです。
変数に条件を代入する方法
変数に条件をいれてしまうこともできます。これは真偽値を使ったデータ抽出と同じことですが、条件を変えて何度か試すのが容易であるため、覚えておくとよいでしょう。たとえば、購入回数に関する条件を「count_purchase」という変数にいれて、その変数を角括弧の中にいれることで条件指定することができます。
# 購入回数で条件指定 count_purchase=zoo_data['購入回数']==6 zoo_data[count_purchase]
このように先ほどと同様の結果が得られました。
queryメソッドを使う方法
最後にクエリで条件を指定する方法です。
zoo_data.query('購入回数==6')
これでも同じ結果をえることができます。データフレームの後に.query()として、()にはクォーテーション”で囲んだ部分で条件を指定します。このときクォーテーション”の中では列名はクォーテーションで囲まずに直接指定することができます。この例では「購入回数」という列名を直接指定しています。queryを使うときに、変数名を使いたい場合は、「@」の後に変数名を指定します。
month='6月' zoo_data.query('購入月==@month')
まとめ
いかがでしたか?今回はデータフレームから条件を指定してデータを抽出する方法をおさらいしました。変数に直接条件を代入する方法や、queryメソッド内で変数を使う方法など、ちょっとしたTipsも紹介しました。
コメント