我有一个用Pandas数据框(见下文格式)从雅虎拉来的股市数据清单。该日期用作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代码的阅读,它目前不支持写入索引。我尝试改用TO_RECORDS,但遇到了issue with Numpy 1.6.2 and datetimes。现在,我试图使用.itertuples编写元组,但SQLite抛出一个错误,指出该数据类型不受支持(请参见下面的代码和结果)。我对Python、Pandas和Numpy比较陌生,所以我完全有可能遗漏了一些明显的东西。我认为我在尝试将DateTime写入SQLite时遇到了一个问题,但我认为我可能把这个问题复杂化了。
我想我“也许”能够通过升级到Numpy 1.7或Pandas的开发版本来解决这个问题,后者在GitHub上发布了修复程序。我更喜欢使用软件的发布版本进行开发--我对此还是个新手,我不想让稳定性问题进一步让事情变得混乱。
有没有办法使用Python2.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.
5条答案
按热度按时间gc0ot86w1#
在最近的Pandas中,索引将保存在数据库中(您过去必须先
reset_index
)。遵循文档(在内存中设置SQLite连接):
我们可以将
price2
保存到cnx
:我们可以通过
read_sql
检索:但是,当存储(和检索)**日期时,日期是
unicode
**而不是Timestamp
。要转换回我们开始的内容,我们可以使用pd.to_datetime
:我们得到与
prices
相同的DataFrame:您还可以使用SQLAlchemy engine:
这允许您使用
read_sql_table
(它只能与SQLAlChemy一起使用):w9apscun2#
不幸的是,就目前公认的答案而言,
pandas.io.write_frame
不再存在于较新版本的Pandas中。例如,我使用的是Pandas0.19.2。你可以做一些类似的事情然后依次使用以下内容预览表:
sc4hvdpw3#
以下是为我工作的代码。我能够将其写入SQLite DB。
dphi5xsq4#
sqlite3最小示例
基于Keertesh Kumar's answer。
将DF写入SQLite
读取SQLITE到DF
sz81bmfz5#
Pandas
read_sql
可以为您设置索引。以from Andy Hayden's answer above为例,而不是:
您可以简单地执行以下操作:
这将自动将日期列设置为索引,并同时将其转换为时间戳。