pandas DataFrame で Yahoo から取得した株式市場データのリストがあります (以下の形式を参照)。日付は DataFrame のインデックスとして機能しています。データ (インデックスを含む) を SQLite データベースに書き出したいと考えています。
AAPL GE
Date
2009-01-02 89.95 14.76
2009-01-05 93.75 14.38
2009-01-06 92.20 14.58
2009-01-07 90.21 13.93
2009-01-08 91.88 13.95
Pandas の write_frame コードを読んだところ、現在は index の書き込みをサポートしていません。代わりに to_records を使用しようとしましたが、Numpy 1.6.2 と datetimes で問題が発生しました。現在、.itertuples を使用してタプルを記述しようとしていますが、SQLite はデータ型がサポートされていないというエラーをスローします (以下のコードと結果を参照)。私はPython、Pandas、およびNumpyに比較的慣れていないため、明らかな何かが欠けている可能性は十分にあります。日時を SQLite に書き込もうとして問題が発生していると思いますが、これを複雑にしすぎている可能性があります。
Numpy 1.7 にアップグレードするか、GitHub に修正が投稿されている Pandas の開発バージョンにアップグレードすることで、問題を修正できる可能性があると思います。私はソフトウェアのリリース バージョンを使用して開発したいと考えています。
Python 2.7.2、Pandas 0.10.0、および Numpy 1.6.2 を使用してこれを達成する方法はありますか? おそらく、どういうわけか日時を掃除しますか?私は少し頭を抱えています。助けていただければ幸いです。
コード:
import numpy as np
import pandas as pd
from pandas import DataFrame, Series
import sqlite3 as db
# download data from yahoo
all_data = {}
for ticker in ['AAPL', 'GE']:
all_data[ticker] = pd.io.data.get_data_yahoo(ticker, '1/1/2009','12/31/2012')
# create a data frame
price = DataFrame({tic: data['Adj Close'] for tic, data in all_data.iteritems()})
# get output ready for database export
output = price.itertuples()
data = tuple(output)
# connect to a test DB with one three-column table titled "Demo"
con = db.connect('c:/Python27/test.db')
wildcards = ','.join(['?'] * 3)
insert_sql = 'INSERT INTO Demo VALUES (%s)' % wildcards
con.executemany(insert_sql, data)
結果:
---------------------------------------------------------------------------
InterfaceError Traceback (most recent call last)
<ipython-input-15-680cc9889c56> in <module>()
----> 1 con.executemany(insert_sql, data)
InterfaceError: Error binding parameter 0 - probably unsupported type.