2014-09-14 5 views
2

кода довольно прямо вперед:Python Pandas 0.14.0. Ошибка в формате временной метки при использовании dataframe.to_sql

import Quandl 
import sqlite3 

myData = Quandl.get("DMDRN/AAPL_ALLFINANCIALRATIOS") 

cnx = sqlite3.connect("APPL.db") 
myData.to_sql('AAPL', cnx) 

Я делаю вызов Quandl API. Это дает мне рамку данных панд. При попытке совершить данные в таблицу SQL я получаю эту ошибку

sqlite3.InterfaceError: Error binding parameter 0 - probably unsupported type. 

Индекс является Отметка.

Я попытался это 1- How to write Pandas dataframe to sqlite with Index эфира 2- установить индекс к другому значению + Convert numpy.datetime64 to string object in python

Для первого я все еще получаю ошибку связывания параметра целого 1 и 2 не работают.

Что я должен делать (или как лучше всего), если я хочу зафиксировать dataframe в таблице sqlite и сохранить дату в качестве индекса.

ответ

5

См pandas to_sql method gives error with date column

Проблема заключается в том, что написание datetime64 значения пока не поддерживается с SQLite связи. С предстоящими пандами 0,15 эта ошибка будет исправлена. Запись индекса уже поддерживается (из pandas 0.14) и управляется с помощью ключевого слова index (по умолчанию True).

Вам несколько вариантов решения этой проблемы:

  • использовать SQLAlchemy, чтобы соединение (вы должны по крайней мере, 0,14 для этого), так как это уже поддерживает запись значений даты и времени:

    import sqlalchemy 
    engine = sqlalchemy.create_engine('sqlite:///APPL.db') 
    myData.to_sql('AAPL', engine, index=True) 
    
  • конвертировать индекс datetime в строки (а затем вы можете напрямую использовать SQL-соединение). Вы можете сделать это с помощью:

    myData.index = myData.index.map(lambda x: x.strftime('%Y-%m-%d %H:%M:%S')) 
    
  • использование разрабатываемой версии панды (https://github.com/pydata/pandas)

+0

Удивительного спасибо! – abuteau

+0

congrats на 10k! –

+0

спасибо andy! :-) – joris