pandas入門 DataFrame DB入出力
CSV、TSVなどのファイル連携と並んでよく使うのがDBからの入出力です。ここではsqlite3を使用しますが、コネクションオブジェクトを変えれば他のものも使用可能です。
read_sql select文の結果をDataFrameに格納する
pandas.io.sqlを使用します。
以下のサンプルは、articleテーブルをメモリ上のsqlite3に作成し、レコードを2件挿入後、select文の結果をDataFrameに格納しています。
read_sqlの引数にSQL文とコネクションを設定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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 |
冒頭でも書きましたが、コネクションを変えればMySQLなどの他のRDBを使用することが可能です。
to_sql DataFrameの内容をDBに格納する
to_sqlでDataFrameの内容をDBに格納することも可能です。先ほどのサンプルの続きで、データを1行追加して更新してみましょう。
1 2 | 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と連携ができるため、こちらも分析以外でも重宝すると思います。