2013-08-16 3 views
0

팬더 시계열 (Python)의 리샘플링 기능에 약간 이상한 동작이 발생합니다. 나는 팬더 (0.12.0)팬더 리샘플링의 이상한 동작

의 최신 버전을 사용하는 다음과 같은 시계열 보자

dates = [datetime(2011, 1, 2, 1), datetime(2011, 1, 2, 2), datetime(2011, 1, 2, 3), 
      datetime(2011, 1, 2, 4), datetime(2011, 1, 2, 5), datetime(2011, 1, 2, 6)] 
ts = Series(np.arange(6.), index=dates) 

그리고 66s와 65S에 리샘플링 시도합니다.

In [45]: ts.resample('66min') 
Out[45]: 
2011-01-02 01:00:00 0.5 
2011-01-02 02:06:00 2.0 
2011-01-02 03:12:00 3.0 
2011-01-02 04:18:00 4.0 
2011-01-02 05:24:00 5.0 
Freq: 66T, dtype: float64 

In [46]: ts.resample('65min') 
Out[46]: 
2011-01-02 01:00:00  0 
2011-01-02 02:05:00 NaN 
2011-01-02 03:10:00 NaN 
2011-01-02 04:15:00 NaN 
2011-01-02 05:20:00 NaN 
2011-01-02 06:25:00 NaN 
Freq: 65T, dtype: float64 

66s에 리샘플링 때의 행동을 이해하지 : 이것은 내가 얻을 결과입니다. 항상 각 간격의 모든 값의 평균 (기본값)을가집니다. 저는 65 세의 행동에 어떻게 영향을 미치는지 이해하지 못하고 모릅니다.

이것은 간단한 문제입니다. 배경은 리샘플링을 포함하는보다 복잡한 데이터 수정 프로세스입니다.

아이디어가 있으십니까?

+0

'fill_method'를 선택해야합니다. 결과로 얻으시길 바라는 점은 무엇입니까? –

답변

1

아마 당신은 resample 대신 보간을 원할 것입니다. 한 가지 방법이 있습니다.

In [53]: index = pd.date_range(freq='66T', start=ts.first_valid_index(), periods=5) 

In [54]: ts.reindex(set(ts.index).union(index)).sort_index().interpolate('time').ix[index] 
Out[54]: 
2011-01-02 01:00:00 0.0 
2011-01-02 02:06:00 1.1 
2011-01-02 03:12:00 2.2 
2011-01-02 04:18:00 3.3 
2011-01-02 05:24:00 4.4 
Freq: 66T, dtype: float64 

In [55]: index = pd.date_range(freq='65T', start=ts.first_valid_index(), periods=5) 

In [56]: ts.reindex(set(ts.index).union(index)).sort_index().interpolate('time').ix[index] 
Out[56]: 
2011-01-02 01:00:00 0.000000 
2011-01-02 02:05:00 1.083333 
2011-01-02 03:10:00 2.166667 
2011-01-02 04:15:00 3.250000 
2011-01-02 05:20:00 4.333333 
Freq: 65T, dtype: float64 

즉, 리샘플링을 향상시킬 수있는 것처럼 보입니다. 언뜻보기에 당신이 시연 한 행동은 신비스럽고, 나는 동의하지 않습니다. 토론 할만한 가치가 있습니다.

+0

그건 아주 좋은 접근 방법입니다. 고마워요! 내 기능에 대한 유망한 기반처럼 보입니다. – user2689410