Вам необходимо задать freq
для индекса даты и времени.
Используя следующее:
sample_values
1970-01-01 05:30:00.000000 0.466812
1970-01-01 05:30:00.016667 0.218692
1970-01-01 05:30:00.033333 0.938067
1970-01-01 05:30:00.050000 0.480025
1970-01-01 05:30:00.066667 0.915175
Частота в настоящее время None
In [1]: print df.index
DatetimeIndex([ '1970-01-01 05:30:00', '1970-01-01 05:30:00.016667',
'1970-01-01 05:30:00.033333', '1970-01-01 05:30:00.050000',
'1970-01-01 05:30:00.066667'],
dtype='datetime64[ns]', freq=None)
И функция Pandas infer_freq
не может его обнаружить:
In [2]: print pd.infer_freq(df.index)
None
Если вы знаете, какой должна быть частота данных, вы можете переиндексировать эту частоту.Однако это сложно сделать с вашим индексом, поскольку повторяющиеся десятичные знаки в метке времени должны быть округлены до некоторого определенного интервала.Это близко:
In [3]: df_freq = df.resample('.000001S').ffill().reindex(pd.date_range(df.index[0],df.index[-1],freq='0.016667S'))
In [4]: print df_freq
sample_values
1970-01-01 05:30:00.000000 0.466812
1970-01-01 05:30:00.016667 0.218692
1970-01-01 05:30:00.033334 0.938067
1970-01-01 05:30:00.050001 0.480025
In [5]: print df_freq.index
DatetimeIndex([ '1970-01-01 05:30:00', '1970-01-01 05:30:00.016667',
'1970-01-01 05:30:00.033334', '1970-01-01 05:30:00.050001'],
dtype='datetime64[ns]', freq='16667U')
Теперь у вас есть определенный freq
.Попробуйте это в своем полном наборе данных, и посмотрите, будет ли seasonal_decompose()
работать.Однако временные метки, вероятно, станут неточными в течение длительного времени.
Вы также можете попробовать что-то вроде этого:
In [6]: df_freq = df.resample('.000001S').interpolate().resample('.005S').first()
In [7]: print df_freq
sample_values
1970-01-01 05:30:00.000 0.466812
1970-01-01 05:30:00.005 0.392377
1970-01-01 05:30:00.010 0.317943
1970-01-01 05:30:00.015 0.243508
1970-01-01 05:30:00.020 0.362558
1970-01-01 05:30:00.025 0.578380
1970-01-01 05:30:00.030 0.794201
1970-01-01 05:30:00.035 0.892255
1970-01-01 05:30:00.040 0.754845
1970-01-01 05:30:00.045 0.617435
1970-01-01 05:30:00.050 0.480025
1970-01-01 05:30:00.055 0.610567
1970-01-01 05:30:00.060 0.741110
1970-01-01 05:30:00.065 0.871652
Это имеет freq='5L'
и использует линейную интерполяцию для приближениятенденция ваших исходных данных с регулярным частотным индексом.Вы можете поэкспериментировать с .005S
для второй частоты понижающей дискретизации, чтобы получить более высокую или более низкую частоту, если хотите.