keisukeのブログ

***乱雑です!自分用のメモです!*** 統計や機械学習の勉強と、読み物を書く練習と、備忘録用のブログ

pandasとSQL

参考:pandasでRDBの読み書きをする

Pandasは、R言語のdata.frameと呼ばれるデータ構造をPythonに移植したもので、 データ解析によく使われるライブラリ。 データ解析にはデータベースが切っても切れない関係であるため、 PandasはSQLと密に連携できるようになっている。 SQLには色々な方言があるのだが、Pythonでそれらの方言を統一的に扱おうとしているのがSQLAlchemyというライブラリ。

そこで、PandasからSQLAlchemyを使ってデータベースから読んだデータをDataFrameに変換するには:

import sqlalchemy
import pandas as pd

# この例ではsqliteを使うが、
engine = sqlalchemy.create_engine('sqlite:///example.db')

# 例えば、PostgreSQLをかわりに使いたければ(ただしpsycopg2というライブラリに内部で依存):
# engine = sqlalchemy.create_engine("postgresql://username:password@host/dbname")

query = 'select * from hoge'
df = pd.io.sql.read_sql(query, engine)

これだけ。簡単!

ちなみに、参考リンクではwith pg.connect(...) as conn:となっているが、上の例のようにPandas最新版では、SQLAlchemyのengineを直接pandas.io.sql.read_sql()に渡すことが可能。こっちのほうが短いしわかりやすいので最新版の機能を使おう。