三次样条插值用大于以下值的值填充 NaN

我正在做三次样条插值,我得到的输出对我来说似乎有点奇怪。输入到 NaN 值中的值大于 NaN 之前的数字,并且大于 NaN 紧接之后的值。如果我使用的method=linear话是没有问题的。但是,我更愿意使用method=cubicspline.


下面是我希望插入的部分以及输出的示例:


df['a'] = df['a'].interpolate(method='cubicspline')

插值之前


    a

1  12.036

2  12.22

3  12.306

4  17.019

5  NaN

6  NaN

7  NaN

8  18.624

9  18.615

10 19.098

11 19.156

插值后


    a

1  12.036

2  12.22

3  12.306

4  17.019

5  20.0825

6  20.5013

7  19.5803

8  18.624

9  18.615

10 19.098

11 19.156

如果有人知道我是否做错了什么,我将非常感激!谢谢


慕的地8271018
浏览 171回答 1
1回答

慕尼黑8549860

为了全面了解为什么会发生这种情况,您必须以更精细的步骤绘制样条曲线,以显示拟合的三次多项式。import numpy as npimport matplotlib.pyplot as pltpoints = [12.036, 12.22, 12.306, 17.019, 18.624, 18.615, 19.098, 19.15]ipoints = [12.036, 12.22, 12.306, 17.019, 20.0825, 20.5013, 19.5803, 18.624, 18.615, 19.098, 19.15]plt.plot([1, 2, 3, 4, 8, 9, 10, 11], points, label='real')plt.plot(range(1, 12), ipoints, label='pandas')from scipy.interpolate import CubicSpline as CScs = CS([1, 2, 3, 4, 8, 9, 10, 11], points)plt.plot(range(1, 12), cs(range(1, 12)), label='scipy')x = np.linspace(1, 12, 200)plt.plot(x, cs(x), label='scipy-fine')plt.legend()plt.show()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python