首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫HDFStore重复项目错误

熊猫HDFStore重复项目错误
EN

Stack Overflow用户
提问于 2013-09-05 22:01:01
回答 1查看 715关注 0票数 1

大家好,谢谢。

我正在尝试定期将金融数据存储到数据库中,以供以后查询。我正在使用Pandas进行几乎所有的数据编码。我想在HDF数据库中添加一个我已经创建的数据。我将csv读入一个dataframe并按时间戳对其进行索引。DataFrame看起来是这样的:

代码语言:javascript
复制
<class 'pandas.core.frame.DataFrame'>
Int64Index: 900 entries, 1378400701110 to 1378410270251
Data columns (total 23 columns):
....
...Columns with numbers of non-null values....
.....
dtypes: float64(19), int64(4)

store = pd.HDFStore('store1.h5')
store.append('df', df)
print store

<class 'pandas.io.pytables.HDFStore'>
File path: store1.h5
/df            frame_table  (typ->appendable,nrows->900,ncols->23,indexers->[index])

但当我试着用商店做任何事时,

代码语言:javascript
复制
print store['df']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/pandas/io/pytables.py", line 289,  in          __getitem__
return self.get(key)
File "/usr/local/lib/python2.7/dist-packages/pandas/io/pytables.py", line 422, in get
return self._read_group(group)
File "/usr/local/lib/python2.7/dist-packages/pandas/io/pytables.py", line 930, in                _read_group
return s.read(**kwargs)
File "/usr/local/lib/python2.7/dist-packages/pandas/io/pytables.py", line 3175, in read
mgr = BlockManager([block], [cols_, index_])
File "/usr/local/lib/python2.7/dist-packages/pandas/core/internals.py", line 1007, in __init__
self._set_ref_locs(do_refs=True)
File "/usr/local/lib/python2.7/dist-packages/pandas/core/internals.py", line 1117, in _set_ref_locs
"does not have _ref_locs set" % (block,labels))
AssertionError: cannot create BlockManager._ref_locs because block 
[FloatBlock:   [LastTrade, Bid1, Bid1Volume,....., Ask5Volume], 19 x 900, dtype float64] 
with duplicate items 
[Index([u'LastTrade', u'Bid1', u'Bid1Volume',..., u'Ask5Volume'], dtype=object)] 
does not have _ref_locs set

我想我在指数上做错了什么,我在这方面很新,对此我也不太熟悉。

编辑:

数据框架结构如下所示:

代码语言:javascript
复制
columns = ['TimeStamp', 'LastTrade', 'Bid1', 'Bid1Volume', 'Bid1', 'Bid1Volume',    'Bid2', 'Bid2Volume', 'Bid3', 'Bid3Volume', 'Bid4', 'Bid4Volume', 
       'Bid5', 'Bid5Volume', 'Ask1', 'Ask1Volume', 'Ask2', 'Ask2Volume', 'Ask3', 'Ask3Volume', 'Ask4', 'Ask4Volume', 'Ask5', 'Ask5Volume']

df = pd.read_csv('/20130905.csv', names=columns, index_col=[0])

df.head()看起来像:

代码语言:javascript
复制
<class 'pandas.core.frame.DataFrame'>
Int64Index: 5 entries, 1378400701110 to 1378400703105
Data columns (total 21 columns):
LastTrade     5  non-null values
Bid1          5  non-null values
Bid1Volume    5  non-null values
Bid1          5  non-null values
.................values
Ask4          5  non-null values
Ask4Volume    5  non-null values
dtypes: float64(17), int64(4)

列太多了,无法打印出内容。但例如:

代码语言:javascript
复制
print df['LastTrade'].iloc[10]
LastTrade    1.31202
Name: 1378400706093, dtype: float64

和Pandas版本:

代码语言:javascript
复制
>>> pd.__version__
'0.12.0'

任何想法都将是非常感谢的,再次感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-06 23:52:07

你真的有一个重复的'Bid1‘和'Bid1Volume’列吗?

不相关,但也应该将索引设置为日期时间索引。

代码语言:javascript
复制
import pandas as pd
df.index = pd.to_datetime(df.index,unit='ms')

这是一个bug,因为重复的列跨dtype(不是什么大不了的事,但没有被检测到)。

最简单的就是没有重复的列。

将固定在0.13中,参见此处:https://github.com/pydata/pandas/pull/4768

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18646668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档