我在上采样和插值后获得相同的结果。你有什么建议可能有什么不对吗? 以下是每年增加频率的重新采样代码:
upsampled = staff.resample('M').sum()
结果是:
upsampled
2016-01-31 17
2016-02-29 0
2016-03-31 0
2016-04-30 0
2016-05-31 0
2016-06-30 0
2016-07-31 0
2016-08-31 0
2016-09-30 0
2016-10-31 32
然后我做插值:
inter_poly = upsampled.astype(float).interpolate(method='spline',order=2)
这是插值的结果:
2016-01-31 17.0
2016-02-29 0.0
2016-03-31 0.0
2016-04-30 0.0
2016-05-31 0.0
2016-06-30 0.0
2016-07-31 0.0
2016-08-31 0.0
2016-09-30 0.0
2016-10-31 32.0
我尝试了几种选择,但没有一种可行。
谢谢!
答案 0 :(得分:0)
似乎评论部分回答了这一点,但我偶然发现了这一点,并认为我会添加一个完整的答案来帮助未来的访问者。
为了使DataFrame.interpolate()起作用,数据列中的0值必须替换为NaN值。以下代码应该可以解决问题:
temp_df = upsampled.replace(0, np.nan)
inter_poly = temp_df.interpolation(method='spline', order=1)
>>> inter_poly
2016-01-31 17.0
2016-02-29 18.7
2016-03-31 20.3
2016-04-30 22.0
2016-05-31 23.7
2016-06-30 25.3
2016-07-31 27.0
2016-08-31 28.7
2016-09-30 30.3
2016-10-31 32.0
这为您提供了插值数据列,删除了NaN。