python pandasのデータフレームを読み込む上で便利なやり方についての話です。csvやexcelで読み込むのも便利ですがsqlite3のデータベースやpickle化して面倒な手続きを少なくすることができるのではないでしょうか。
SQLITE3で読み書きする
この場合はデータフレームへアクセスする話です。excelやcsvと違いアクセス禁止などがないのでデータベースを開きながら編集が可能です。
import pandas as pd import sqlite3 conn = sqlite3.connect('foo.sqlite3') df = pd.DataFrame(columns=["col1", "col2"]) df["col1"] = ["hoge"] df["col2"] = [1234] # 出力 print(df) df.to_sql("table1", conn, index=False, if_exists='replace') # 読み込み df2 = pd.read_sql_query('select * from {}'.format('table1'), conn) print(df2)
sqlite3で注意する必要があるのは列の型が一致しないと書き込みでエラーが出るということです。型の不一致が起きないように読み込んだ後にデータフレームの型を一致させておたほうがいいと思います。csvやexcelではここのあたりがゆるいので何もしなくていい場合がよくあります。
# 読み込み データフレームの"dt"列が時間の型であるとき df2 = pd.read_sql_query('select * from {}'.format('table1'), conn) df2["dt"] = pd.to_datetime(df2["dt"])
pickle化したのを読み書きする
この場合はメモリ上にあるデータフレームをファイルへ書き出すやり方です。pickle自体はjoblibやpython3で用意されていますがpandasをつかえばもっと短く簡単にアクセスできます。出力したときに型が維持されているので読み込む時に手続きをする必要もありません。
import pandas as pd path = "bar.pkl" df = pd.DataFrame(columns=["col1", "col2"]) df["col1"] = ["hoge"] df["col2"] = [1234] # 出力 print(df) df.to_pickle(path) # 読み込み df2 = pd.read_pickle(path) print(df2)
出力結果
2つの出力結果は同じです。
col1 col2 0 hoge 1234 col1 col2 0 hoge 1234
最後に
凝ったことをしなければexcelでの出力がクセがなく使いやすいのですが、データを保管する場合はやはりデータベースで扱えるほうがいいと思います。sqlite3であればDB Browser for SQLiteなどで編集も可能です。