x
是在DateTimeIndex上的一连串的float64数字
x.head(20)
看起来像这样:
Timestamp
2018-05-03 15:05:31.864 1.799104
2018-05-03 15:05:31.993 1.080555
2018-05-03 15:05:32.145 1.374885
2018-05-03 15:05:32.963 1.264249
2018-05-03 15:05:33.529 1.251358
2018-05-03 15:05:33.938 1.199366
2018-05-03 15:05:34.378 1.201764
2018-05-03 15:05:34.496 1.267969
2018-05-03 15:05:34.895 1.251358
2018-05-03 15:05:36.572 1.313922
2018-05-03 15:05:37.562 1.270770
2018-05-03 15:05:38.013 1.230315
2018-05-03 15:05:38.166 1.185131
2018-05-03 15:05:38.285 1.150098
2018-05-03 15:05:39.555 1.122180
2018-05-03 15:05:39.698 1.094660
2018-05-03 15:05:40.815 1.084887
2018-05-03 15:05:41.700 1.068585
2018-05-03 15:05:41.993 1.071981
2018-05-03 15:05:42.139 1.084344
Name: C2:37:A3:40:10:60_s, dtype: float64
我想做的是对系列重新采样并内插到100ms的周期。这是我尝试过的:
y = x.resample("100ms").interpolate("linear")
它根本并没有实现我的预期。
首先,y
包含1700个条目中的大约100个NaN。插值法不应该照顾NaN吗?
我在做什么错?我真的只是想获得一个很好且平滑的序列,每100ms就有一个值,并在必要时进行线性插值。基本上将左图变成右图:
我曾经直接通过scipy.interpolate.interp1d
进行此操作,但是希望直接在熊猫中使用一些不那么麻烦的东西。
答案 0 :(得分:1)
IIUC:
您想对现有索引与重采样索引的并集进行插值。
idx = pd.date_range(x.first_valid_index(), x.last_valid_index(), freq='100ms')
这是获取索引的一种可爱方式
idx = x.asfreq('100ms').index
如果您想要'100ms'
的圆形单位
idx = idx.floor('100ms')
'index'
进行插值。这将基于索引值之间的间隔为线性。'100ms'
重新建立索引y = x.reindex(x.index.union(idx)).interpolate('index').reindex(idx)
y
Timestamp
2018-05-03 15:05:31.864 1.799104
2018-05-03 15:05:31.964 1.242089
2018-05-03 15:05:32.064 1.218038
2018-05-03 15:05:32.164 1.372315
2018-05-03 15:05:32.264 1.358790
2018-05-03 15:05:32.364 1.345265
2018-05-03 15:05:32.464 1.331740
2018-05-03 15:05:32.564 1.318214
2018-05-03 15:05:32.664 1.304689
2018-05-03 15:05:32.764 1.291164
...
2018-05-03 15:05:41.164 1.078458
2018-05-03 15:05:41.264 1.076616
2018-05-03 15:05:41.364 1.074774
2018-05-03 15:05:41.464 1.072932
2018-05-03 15:05:41.564 1.071090
2018-05-03 15:05:41.664 1.069248
2018-05-03 15:05:41.764 1.069327
2018-05-03 15:05:41.864 1.070486
2018-05-03 15:05:41.964 1.071645
2018-05-03 15:05:42.064 1.077993
Freq: 100L, Name: C2, Length: 103, dtype: float64