pandasql : DataFrameにSQLクエリを発行するライブラリ
やっぱりDataFrameにもSQLをゴリゴリ書きたい!
Pandasをいじっていると、そう思うことはよくあります。
別にDataFrameに不満があるわけではありませんが、例えば次のような例を見てみましょう。
df = pd.DataFrame({'category':['game','game','game','PC','Tablet'],'machine': ['XBOX','PS','DS','ThinkPad','iPad'], 'price': [300,300,150,2000,600]})
category | machine | price |
---|---|---|
game | XBOX | 300 |
game | PS | 300 |
game | DS | 150 |
PC | ThinkPad | 2000 |
Tablet | iPad | 600 |
上記のようなDataFrameのうち、machineがXBOXとiPadであるものを選択するとします。
df[(df['machine']=='XBOX')|(df['machine']=='iPad')]
こんな感じになります。率直に言って、あまり見やすい構文ではありません。
もし条件を5つ、6つと増やしていくと、とても素敵なコードになると思います。
pandasqlでSQL文を書いてしまう
pandasqlは、アメリカのベンチャー企業Yhatが公開したライブラリです。
紹介はこちらをどうぞ。
では早速、上の例をSQLに書き直してみましょう。
import pandas as pd from pandasql import sqldf q = """ SELECT * FROM df WHERE machine IN ('XBOX','iPad');""" sqldf(q,locals())
多少冗長になりましたが、後で読みやすいのは断然こっちです。
条件が増えても、INの中身を追加するなり、ANDで繋げていったり、いくらでも書きようがあります。
実装はsqlite3相当だそうで、大抵のSQLなら走るでしょう。
もちろん、groupbyも使えます。
q = """ SELECT category,sum(price) FROM df group by category;"""
まさに即戦力ライブラリと言えます。是非使ってみてください。