Python PostgreSQLのテーブルをPandasのDataFrameへ読み込む

PostgreSQLのテーブルをPandasのDataFrameに読み込む方法の備忘録です。

今回も以下で提供されているサンプルデータを使っています。
PostgreSQL Sample Database

まずはPandasと、PostgreSQLのドライバとしてpsycopg2をインポートして、DBに接続しています。

import pandas as pd
import psycopg2

# 接続情報
connection_config = {
    'host': 'localhost',
    'port': '5432',
    'database': 'test',
    'user': 'ohke',
    'password': 'ohke'
}

# 接続
connection = psycopg2.connect(**connection_config)

次にDataFrameへロードします。 Pandasのread_sqlメソッドに先程接続したコネクションとSQL(文字列)を渡すことで、SELECT結果をDataFrameとして返してくれます。

引数index_colでインデックスを指定しています。 この引数が無い場合は、1から自動的に採番されます。

# DataFrameでロード
rentals = pd.read_sql(sql="SELECT * FROM rental;", con=connection, index_col='rental_id' )

# 表示
rentals

Jupyterでは以下のように表形式で表示されます。 テーブルのカラム名がそのままDataFrameのカラム名として使われていること、インデックスとしてrental_idが使われていることが確認できます。

f:id:ohke:20170623085109p:plain

普通のDataFrameですので、例えばカラム名でSeriesを取り出すこともできます。

rentals['inventory_id']
rental_id
2        1525
3        1711
4        2452
5        2079
6        2792
7        3995
8        2346
9        2580

時刻はTimestamp型にマッピングされるようです。

rentals['rental_date'][1]
Timestamp('2005-05-24 22:53:30')

また、統計値も取得できます(あまり意味のある値ではありませんが)。

rentals.describe()

f:id:ohke:20170623090607p:plain:w350