使用内置插值方法线性外推熊猫数据框

问题描述

考虑以下数据框:

df = pd.DataFrame([np.nan,np.nan,1,5,6,6.1,np.nan])

我想使用 pandas.DataFrame.interpolate 方法线性外推起始行和结束行的数据帧条目,类似于执行以下操作时得到的结果:

from scipy import interpolate
df_num = df.dropna()
xi = df_num.index.values
yi = df_num.values[:,0]
f = interpolate.interp1d(xi,yi,kind='linear',fill_value='extrapolate')
x = [0,7,8]
print(f(x))
[-7.  -3. 6.2 6.3]

pandas interpolate 中的 'linear' 选项似乎调用了 numpy 的 interpolate 方法,该方法不进行线性外推。有没有办法调用内置的 interpolate 方法来实现?

解决方法

您可以直接在 Pandas 中使用 scipy interpolate 方法。请参阅 pandas.DataFrame.interpolate 文档,您可以使用 scipy.interpolate.interp1d 中的 method 选项技术,如附加链接中所述。

您的示例的解决方案可能如下所示:

df.interpolate(method="slinear",fill_value="extrapolate",limit_direction="both")

# Out: 
#      0
# 0 -7.0
# 1 -3.0
# 2  1.0
# 3  5.0
# 4  5.5
# 5  6.0
# 6  6.1
# 7  6.2
# 8  6.3

然后您可以轻松选择您感兴趣的任何值,例如df_interpolated.loc[x](其中 df_interpolated 是前一个代码块的输出)使用由 x 变量在您的问题中定义的索引。

说明:

  • method="slinear" - 上面 Pandas 文档中列出的方法之一,它被传递给 scipy interp1d(参见例如 this link
  • fill_value="extrapolate" - 传递 scipy 允许的任何选项(这里推断这正是您想要的)
  • limit_direction="both" - 在两个方向上进行外推(否则在这种情况下默认将设置为“向前”,您会看到前两个值的 np.nan

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...