Обходной путь
В вашем случае, я думаю, вам следует выполнить повторную выборку по методу, например по mean
, перед интерполяцией.Я считаю, что это просто связано с выводом resample
, и то, как interpolate
читает это.В качестве примера выглядит следующее:
data07 = data.resample('700L').mean().interpolate()
data06 = data.resample('600L').mean().interpolate()
data10 = data.resample('1000L').mean().interpolate()
Этот график показывает, что он работает:
data07.v1.plot(style='.',label='700 ms', alpha=0.75, ms=3,zorder=2)
data06.v1.plot(style='^',label='600 ms', alpha=0.5, zorder=1)
data10.v1.plot(style='^',label='1000 ms', alpha=0.5, zorder=0, ms=10)
data.v1.plot(style='x',label='original', ms=10)
plt.legend()
![enter image description here](https://i.stack.imgur.com/Bfvdh.png)
Объяснение (вид ...) :
При повторной выборке данных любым методом, включая mean()
, вы получаете NaN
с для того места, где ваши данные были пересчитаны:
>>> data.resample('700L').mean().head()
v1
ts
1970-01-01 00:00:59.500000+00:00 0.0
1970-01-01 00:01:00.200000+00:00 NaN
1970-01-01 00:01:00.900000+00:00 NaN
1970-01-01 00:01:01.600000+00:00 NaN
1970-01-01 00:01:02.300000+00:00 NaN
При вызове interpolate
при этом он заполнит NaN
соответствующей линейной интерполяцией.
>>> data.resample('700l').mean().interpolate().head()
v1
ts
1970-01-01 00:00:59.500000+00:00 0.0
1970-01-01 00:01:00.200000+00:00 0.0
1970-01-01 00:01:00.900000+00:00 0.0
1970-01-01 00:01:01.600000+00:00 0.0
1970-01-01 00:01:02.300000+00:00 0.0
Когда вы вызываете interpolate
непосредственно на выходеиз resample
, поведение interpolate
, похоже, не соответствует ожидаемому, давая вначале кучу NaN
с, за которым следует постепенный наклон от максимума (1) вниз.Не совсем уверен, почему:
>>> data.resample('700l').interpolate().head()
v1
ts
1970-01-01 00:00:59.500000+00:00 NaN
1970-01-01 00:01:00.200000+00:00 NaN
1970-01-01 00:01:00.900000+00:00 NaN
1970-01-01 00:01:01.600000+00:00 NaN
1970-01-01 00:01:02.300000+00:00 NaN