Pandasでは様々なデータソースからのデータ連携に対応できるようにメソッドが用意されています。その中にはDBのテーブルから直接データをデータフレームに格納するメソッドもあります。
今回はPostgreSQLからSQLでSELECTしたデータをPandasデータフレームに格納する方法を紹介します。
目次
前提
今回はローカル環境のPostgreSQLで事前に用意した学部マスタからデータを取得します。
Pythonで実装
PostgreSQLへの接続
PythonでPostgreSQLに接続するには、pcycopg2を使います。pcycopg2での操作は以下記事を参考にしてみてください。
import psycopg2
### psycopg2を使ってpostgresqlにアクセスする
def connect():
con = psycopg2.connect('postgresql://{user}:{password}@{host}:{port}/{dbname}'.format(
user="postgres", #ユーザ
password="postgresql", #パスワード
host="localhost", #ホスト名
port="5432", #ポート
dbname="studentinfo")) #データベース名
return con
if __name__ == '__main__':
con = connect()
Pandasでのデータ読込
DBからSQLでデータを取得するには、pd.read_sql()を用います。第一引数に実行するSQL、第二引数にDBの接続オブジェクトを渡します。
sql = "SELECT * FROM facultymaster"
df = pd.read_sql(sql=sql, con=con)
dfにSQL実行結果のデータが格納されているので、確認してみます。
冒頭で確認した学部マスタの値を取得できています。
【参考】特定列をインデックスに指定したい場合
既存列をデータフレームのインデックスに指定したい場合は、引数index_colを追加し、インデックスにしたい列名を指定します。
df = pd.read_sql(sql=sql, con=con, index_col="facultyid")
コード全体
今回のコード全体のおさらいです。
import pandas as pd
import psycopg2
### psycopg2を使ってpostgresqlにアクセスする
def connect():
con = psycopg2.connect('postgresql://{user}:{password}@{host}:{port}/{dbname}'.format(
user="postgres", #ユーザ
password="postgresql", #パスワード
host="localhost", #ホスト名
port="5432", #ポート
dbname="studentinfo")) #データベース名
return con
if __name__ == '__main__':
con = connect()
sql = "SELECT * FROM facultymaster"
df = pd.read_sql(sql=sql, con=con)
Pythonでデータサイエンスするなら
Pythonでデータサイエンスをするなら、以下の書籍がおすすめです。Pandas、matplotlib、Numpy、scikit-learnといったデータサイエンスに必要なライブラリを、体系立てて一通り学ぶことができます。
リンク
初学者の方にはこちらもオススメです^^
リンク
まとめ
PandasでDBからSQLで取得したデータを読み込む方法を紹介しました。
SQLで制御することで、Pandasに読み込むデータを必要最低限に抑えることができます。処理時間含め実用的な処理を実装できるので、是非実践してみてください。
ではでは👋