提问人:jerron 提问时间:11/3/2023 更新时间:11/10/2023 访问量:33
为什么 DataFrame.Interpolate with Spline 会产生意外的波浪
why does dataframe.interpolate with spline create unexpected wave
问:
我正在尝试使用 dataframe.interpolate 来填充缺失的数据。这是我的测试:
from itertools import product
df=pd.DataFrame.from_dict({
1.5 :[np.nan ,91.219 ,np.nan ,np.nan ,102.102 ,np.nan ,np.nan ],
2.0 :[np.nan ,np.nan ,np.nan ,np.nan ,103.711 ,np.nan ,103.031 ],
2.5 :[np.nan ,98.25 ,np.nan ,100.406 ,104.695 ,np.nan ,104.938 ],
3.0 :[np.nan ,101.578 ,np.nan ,102.969 ,104.875 ,np.nan ,105.242 ],
3.5 :[np.nan ,103.859 ,87.93 ,104.531 ,104.906 ,np.nan ,105.32 ],
4.0 :[np.nan ,105.156 ,94.469 ,105.656 ,105.844 ,89.68 ,106.523 ],
4.5 :[94.266 ,106.039 ,96.82 ,106.75 ,103.156 ,93.703 ,107.938 ],
5.0 :[97.336 ,107.953 ,98.602 ,107.906 ,104.25 ,96.547 ,109.703 ],
5.5 :[99.664 ,110.438 ,100.203 ,108.906 ,100.375 ,98.844 ,110.188 ],
6.0 :[101.344 ,112.703 ,101.492 ,108.688 ,102.906 ,100.68 ,110.5 ],
6.5 :[102.313 ,112.078 ,102.266 ,108.813 ,104.5 ,101.875 ,104 ],
7.0 :[102.656 ,114.469 ,102.242 ,108.813 ,np.nan ,102.625 ,109 ],
7.5 :[103.25 ,np.nan ,102.594 ,108.813 ,np.nan ,103.234 ,109 ],
}, orient='index')
df.plot(title='original')
for int_method,int_order in list(product(['spline'],range(1,4)))+[
(x,3) for x in ['nearest', 'zero', 'slinear', 'quadratic', 'cubic', 'barycentric', 'polynomial',
'krogh', 'piecewise_polynomial', 'pchip', 'akima', 'cubicspline','from_derivatives','linear',
]
]:
spl=df.interpolate(limit_direction='both',method=int_method,order=int_order)
spl.plot(title=f'{int_method},{int_order}')
似乎只有样条才能给我提供我需要的解释。但是,我发现它似乎增加了一些意想不到的波动:
有人可以帮助我了解发生了什么,甚至提供一些关于如何改进的建议(我知道“改进”在这里是一个模糊的短语。我自己找不到明确的定义)? 谢谢!
答:
0赞
jerron
11/10/2023
#1
这是因为熊猫。DataFrame.interpolate 在内部调用 scipy.interpolate,scipy.interpolate 会在进行插值之前对 X(在图中它们在 Y 轴上)进行排序。显然,这不是我们在这里想要的,它混合了左侧和右侧的势头。
评论