Python学習講座

PythonエンジニアによるPython3学習支援サイト

pandas

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と連携ができるため、こちらも分析以外でも重宝すると思います。

-pandas

S