2013-08-16 2 views
0

Я испытываю довольно странное поведение функции повторной выборки временного ряда pandas (Python). Я использую последнюю версию панд (0.12.0)Странное поведение передискретизации pandas

Возьмите следующие временные ряды:

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 

Я действительно понимаю поведение при повторной дискретизации до 66 с. Он всегда принимает среднее значение (по умолчанию) всех значений в соответствующем интервале. Я не понимаю и не знаю, как влиять на поведение за 65 лет.

Это упрощенная проблема. Фоном является более сложный процесс коррекции данных, включающий повторную выборку.

Любые идеи?

+0

Вы должны выбрать 'fill_method'. Что бы вы хотели получить в результате? –

ответ

1

Возможно, вы хотите интерполировать вместо повторной выборки. Вот один из способов:

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

Смежные вопросы