熊猫时间序列和酸洗

时间:2014-09-20 22:44:15

标签: python pandas

我正在使用熊猫面临一个非常奇怪的问题。

我有一个熊猫时间序列,很好,很有效。我使用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]

所以对我来说时间索引没有问题,它是独一无二的。 数据时间系列看起来合法,因为它在第一时间存在。但是在酸洗和去皮过程中,大熊猫拒绝建立时间系列。

这可能是个错误吗?

1 个答案:

答案 0 :(得分:2)

他们是0.14.0中存在的错误,固定在主人(0.15.0),期待在2014年10月初发布,见here

基本上尝试使用非唯一索引来挑选pandas对象,该索引仅具有单个dtype(例如,仅由浮点数组成的Series或DataFrame),由于重建代码中的某些假设,将在重建时失败。

修复方法是使用master / 0.15.0。 (我相信0.14.1也可以),或者让你的pandas对象有一个独特的索引。