我正在使用熊猫面临一个非常奇怪的问题。
我有一个熊猫时间序列,很好,很有效。我使用python标准工具来腌制它,但是当我想要将它解开时,pandas无法重建该对象,并且认为索引是错误的。
酸洗pandas数据结构有问题吗?一个首选的方法吗?我计划这样做的方式有什么问题吗?
以下是详细信息:
我有一些时间序列,称为数据,在经过一些处理后,希望保留为pickle文件,以便重用加速。我的时间序列如下:
sample_time
2013-06-03 21:55:40 0.553846
2013-06-03 22:13:25 0.569231
...
2013-07-09 16:55:00 0.430769
2013-07-09 16:57:45 0.430769
2013-07-09 16:59:44 0.384615
Name: fill, Length: 11550
我像这样挑选Series对象:
pickle.dump(data,open("pickle_file","w"))
然后尝试重新加载它:
data_back=pickle.load(open("pickle_file",'r'))
然后我收到以下错误:
Traceback (most recent call last):
File "/home/antoine/velib/code/project_tools.py", line 197, in <module>
test()
File "/home/antoine/velib/code/project_tools.py", line 172, in test
data_back=p_l(open("test_dump",'r'))
File "/home/antoine/program/anaconda/lib/python2.7/pickle.py", line 1378, in load
return Unpickler(file).load()
File "/home/antoine/program/anaconda/lib/python2.7/pickle.py", line 858, in load
dispatch[key](self)
File "/home/antoine/program/anaconda/lib/python2.7/pickle.py", line 1217, in load_build
setstate(state)
File "/home/antoine/program/anaconda/lib/python2.7/site-packages/pandas/core/internals.py", line 2063, in __setstate__
placement=self.axes[0].get_indexer(items))
File "/home/antoine/program/anaconda/lib/python2.7/site-packages/pandas/core/index.py", line 1259, in get_indexer
raise InvalidIndexError('Reindexing only valid with uniquely'
pandas.core.index.InvalidIndexError: Reindexing only valid with uniquely valued Index objects
Pandas拒绝重建系列,发现索引可能不是唯一的。 但我的时间序列日期时间索引保证是唯一的。证明:如果我根据我的数据索引建立一个系列,我发现没有重复:
我制作了一个只包含我的数据系列索引的新系列。
data_index=pd.DataFrame(data=data.index)
data_index["dup"]=data_index.duplicated()
data_index
sample_time dup
0 2013-06-03 21:55:40 False
1 2013-06-03 22:13:25 False
2 2013-06-03 22:19:21 False
... ... ...
11547 2013-07-09 16:55:00 False
11548 2013-07-09 16:57:45 False
11549 2013-07-09 16:59:44 False
[11550 rows x 2 columns]
所以对我来说时间索引没有问题,它是独一无二的。 数据时间系列看起来合法,因为它在第一时间存在。但是在酸洗和去皮过程中,大熊猫拒绝建立时间系列。
这可能是个错误吗?
答案 0 :(得分:2)
他们是0.14.0中存在的错误,固定在主人(0.15.0),期待在2014年10月初发布,见here。
基本上尝试使用非唯一索引来挑选pandas对象,该索引仅具有单个dtype(例如,仅由浮点数组成的Series或DataFrame),由于重建代码中的某些假设,将在重建时失败。
修复方法是使用master / 0.15.0。 (我相信0.14.1也可以),或者让你的pandas对象有一个独特的索引。