読者です 読者をやめる 読者になる 読者になる

DPCデータの分析とかやるブログ

DPCデータの分析なんかをテキトーにやってます。

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がXBOXiPadであるものを選択するとします。

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;"""

まさに即戦力ライブラリと言えます。是非使ってみてください。