У меня есть список данных фондового рынка, извлеченных из Yahoo в pandas DataFrame (см. формат ниже). Дата служит индексом в 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
Основываясь на моем чтении кода write_frame для Pandas, он в настоящее время не поддерживает запись индекса. Вместо этого я попытался использовать to_records, но столкнулся с проблемой с Numpy 1.6.2 и datetimes. Теперь я пытаюсь написать кортежи с использованием .itertuples, но SQLite выдает ошибку, что тип данных не поддерживается (см. Код и результат ниже). Я относительно новичок в Python, pandas и Numpy, поэтому вполне возможно, что я пропустил что-то очевидное. Я думаю, что у меня возникла проблема с попыткой написать datetime для SQLite, но я думаю, что это может быть слишком сложно.
Я думаю, что я смогу исправить эту проблему, обновив до Numpy 1.7 или версию разработки Pandas, у которой есть исправление, опубликованное в GitHub. Я бы предпочел разработать версии версий программного обеспечения - я новичок в этом, и я не хочу, чтобы проблемы стабильности путали вопросы.
Есть ли способ сделать это, используя 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.