CSV、TSVなどのファイル連携と並んでよく使うのがDBからの入出力です。ここではsqlite3を使用しますが、コネクションオブジェクトを変えれば他のものも使用可能です。
read_sql select文の結果をDataFrameに格納する
pandas.io.sqlを使用します。
以下のサンプルは、articleテーブルをメモリ上のsqlite3に作成し、レコードを2件挿入後、select文の結果をDataFrameに格納しています。
read_sqlの引数にSQL文とコネクションを設定します。
import sqlite3 import pandas as pd import pandas.io.sql as psql # sqlite3に接続 con = sqlite3.connect(':memory:') cur = con.cursor() # サンプルテーブルを作成 cur.execute('CREATE TABLE articles (id int, title varchar(1024), body text, created datetime)') # サンプルデータを挿入 cur.execute('insert into articles values (1, "sample1", "AAAA", "2017-07-14 00:00:00")') cur.execute('insert into articles values (2, "sample2", "BBBB", "2017-07-15 00:00:00")') # Select文からDataFrameを作成 df = psql.read_sql("SELECT * FROM articles;", con) # id title body created # 0 1 sample1 AAAA 2017-07-14 00:00:00 # 1 2 sample2 BBBB 2017-07-15 00:00:00
to_sql DataFrameの内容をDBに格納する
to_sqlでDataFrameの内容をDBに格納することも可能です。先ほどのサンプルの続きで、データを1行追加して更新してみましょう。
df2 = pd.DataFrame([['sample3', 'CCC', '2017-07-16 00:00:00']], columns=['title', 'body', 'created'], index=[2]) df2.to_sql('articles', con, if_exists='append', index=None)
to_sqlの引数にはテーブル名、コネクションを指定します。if_existsはデータが既に存在している場合の挙動を設定し、appendかrepleceを選ぶことができます。
簡単にDBと連携ができるため、こちらも分析以外でも重宝すると思います。
sqlite以外の場合
2018/08/19追記
冒頭でも書きましたが、コネクションを変えればMySQLなどの他のRDBを使用することが可能です。が、sqlite以外はsqlalchemyのengineの使用が必須となりました。以下にデータ挿入のサンプルを示します。
from sqlalchemy import create_engine engine = create_engine('mysql://%s:%s@%s:%s/%s' % (user, password, host, port, schema)) with engine.begin() as con: df.to_sql('table_name', con=con, if_exists='append', index=False)