【发布时间】:2014-09-13 14:23:38
【问题描述】:
我需要使用具有多索引的大尺寸数据框,因此我尝试创建一个数据框来学习如何将其存储在 hdf5 文件中。 数据框是这样的:(前2列有多重索引)
Symbol Date 0
C 2014-07-21 4792
B 2014-07-21 4492
A 2014-07-21 5681
B 2014-07-21 8310
A 2014-07-21 1197
C 2014-07-21 4722
2014-07-21 7695
2014-07-21 1774
我正在使用 pandas.to_hdf,但当我尝试选择组中的数据时,它会创建一个“固定格式存储”:
store.select('table','Symbol == "A"')
它返回一些错误,主要问题是这个
TypeError: cannot pass a where specification when reading from a Fixed format store. this store must be selected in its entirety
然后我尝试像这样附加 DataFrame:
store.append('ts1',timedata)
这应该创建一个表,但这给了我另一个错误:
TypeError: [unicode] is not implemented as a table column
所以我需要代码以 hdf5 格式将数据帧存储在表中并从单个索引中选择数据(为此我找到了此代码:store.select('timedata','Symbol == "A"'))
【问题讨论】:
-
请报告您的 pandas 版本、numpy 版本、python 版本、操作系统,并展示您是如何创建该框架的。
-
pandas 0.14.1、numpy 1.8.1 系统版本 2.7.7 |Anaconda 2.0.1 (x86_64)| (默认,2014 年 6 月 2 日,12:48:16)\n[GCC 4.0.1(Apple Inc. build 5493)]
-
我创建了从我用随机数据、随机随机符号和随机数量创建的 sqlite3 数据帧中提取数据的数据帧:
doubleIndex = c.execute("SELECT date, symbol, qty FROM stocks") double = c.fetchall() serie = pandas.DataFrame(double,columns=['Date','Symbol', 'DateValue']) serie['Date'] = pandas.to_datetime(serie['Date']) serie = serie.sort('Date',ascending=True) -
这就是我创建 MultiIndex 的方式:
index = pandas.MultiIndex.from_arrays([serie['Symbol'],serie['Date']], names=['Symbol','Date']) -
你可能有 unicode,尝试
df[column] = df[column].astype(str)将 unicode 更改为字符串。无法在 py2.7 中存储 unicode。您也应该使用read_sql(并且可能关闭 sqlite3 中的 unicode 选项)
标签: python sql pandas hdf5 multi-index