如何解决熊猫插值不会给出单调的结果 编辑
我有以下数据,我想使用样条将插值方法应用于最后 4 个数字(我知道这是外推):
import numpy as np
x = [
18.792571,19.170139,19.370556,19.393820,19.239932,18.908891,18.400699,17.892507,17.384314,16.876122,16.367930,15.859737,np.nan,np.nan
]
我正在运行 Pandas interpolate 并且发生了一件非常奇怪的事情,如代码
import pandas as pd
pd.Series(x).interpolate(
method="spline",order=1
)
返回
0 18.792571
1 19.170139
2 19.370556
3 19.393820
4 19.239932
5 18.908891
6 18.400699
7 17.892507
8 17.384314
9 16.876122
10 16.367930
11 15.859737
12 16.103099
13 15.790022
14 15.476945
15 15.163868
dtype: float64
因此,虽然数据的趋势显然是负面的,因为很早的指数,插值产生了向上的跳跃。使用 scipy 运行相同的计算时
import scipy.interpolate as inp
train_x = [_ for _ in x if _ > 0]
s = inp.InterpolatedUnivariateSpline(range(len(train_x)),train_x,k=1)
ynew = s(range(len(x)))
ynew[12:]
我明白
array([15.351544,14.843351,14.335158,13.826965])
在这种情况下,插值没有向上变化,所以结果对我来说很有意义。
我的问题是:
- 为什么 pandas 和 scipy 结果不同?
- 如何让 pandas
interpolate
给出我使用 scipy 获得的结果? - 为什么熊猫会发生这种向上的变化?
提前致谢!
编辑
使用 scipy interp1d 我有同样的问题:
s = inp.interp1d(range(len(train_x)),kind=1,fill_value='extrapolate')
ynew = s(range(len(x)))
ynew[12:]
给予
array([15.351544,13.826965])
解决方法
也许不是答案,只是一些评论:
-
Pandas 使用
scipy.interpolate.interp1d
而不是InterpolatedUnivariateSpline
。我相信这些在实现上略有不同。 -
我会使用
scipy.interpolate.interp1d
来查看 pandas 和 scipy 是否匹配。 -
插值用于填充内数据。你所拥有的更符合外推。尽管可以使用这些方法完成外推。我预计结果可能会导致诸如向上变化之类的特殊性。
实际上,pandas 使用 UnivariateSpline
,因此,为了获得与 pandas 相同的结果,我们可以使用 scipy 运行以下命令:
import scipy.interpolate as inp
train_x = [_ for _ in x if _ > 0]
s = inp.UnivariateSpline(x=range(len(train_x)),y=train_x,k=1)
ynew = s(range(len(x)))
ynew[12:]
给出
array([16.10309945,15.79002222,15.47694498,15.16386774])
使插值减少的方法,在这种情况下,是通过 s = 0
:
pd.Series(x).interpolate(
method="spline",order=1,s=0
)
返回:
0 18.792571
1 19.170139
2 19.370556
3 19.393820
4 19.239932
5 18.908891
6 18.400699
7 17.892507
8 17.384314
9 16.876122
10 16.367930
11 15.859737
12 15.351544
13 14.843351
14 14.335158
15 13.826965
dtype: float64
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。