2014-09-20 7 views
0

팬더를 사용하여 매우 이상한 문제에 직면하고 있습니다.pandas 시계열 및 산수화

저는 팬더 시계열을 가지고 있습니다. 파이썬 표준 도구를 사용하여 피클 링하지만 피킹 해제 할 때 팬더는 개체를 다시 작성하지 못하고 인덱스가 잘못되었음을 pretexing합니다.

피클 링 팬더 데이터 구조에 문제가 있습니까? 그것을하는 선호 한 방법? 내가 계획하고있는 방식에 문제가 있습니까?

여기에 세부 사항은 다음과 같습니다

좀 처리 후 재사용 속도 향상을 위해, 피클 파일로 보관하고자하는 데이터라는 시간이 시리즈를 보유하고 있습니다. 내 시간이 시리즈는 다음과 같다 :

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 

나는이 같은 시리즈 개체 피클 :

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 

Pa ndas는 시리즈를 다시 작성하기를 거부하여 색인이 고유하지 않을 수 있음을 알았습니다. 그러나 시계열 datetime 인덱스는 고유해야합니다. 증명 : 데이터 색인에서 세리에를 만들면 중복이 없습니다.

데이터 색인 만 들어있는 새 세리를 만듭니다.

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] 

그래서 나를 위해 시간 색인에는 문제가 없습니다. 그것은 고유합니다. 데이터 시간 세리에는 처음 존재하기 때문에 합법적 인 것으로 보입니다. 그러나 산 세척과 unpickling의 과정에서, 팬더는 시간 세리에 다시 빌드를 거부합니다.

버그 일 수 있습니까?

+1

어떤 버전의 팬더인가요? – Jeff

+0

버전을 넘는 경우 특히 내장 된 피클 지원을 사용해야합니다. http://pandas.pydata.org/pandas-docs/dev/io.html#io-pickle – Jeff

+1

버그 (마스터에서 수정 됨)가 있었고, 여기를 참조하십시오 : https://github.com/pydata/pandas/pull/7794; 중복이있는 경우에만 표시됩니다. – Jeff

답변

2

버그가 0.14.0에 있었고 마스터 (0.15.0)로 고정되어 2014 년 10 월 초에 출시 될 예정이며 here을 참조하십시오.

기본적으로 단일 dtype (예 : 시리즈 또는 플로트만으로 구성된 DataFrame)이있는 고유하지 않은 색인으로 팬더 개체를 피클링하려는 경우 재구성 코드의 일부 가정으로 인해 재구성에 실패합니다.

해결 방법은 master/0.15.0을 사용하는 것입니다. (나는 0.14.1도 잘 동작한다고 생각합니다.) 또는 팬더 객체가 고유 한 색인을 갖도록 만드십시오.