【问题标题】:linearly extrapolate pandas dataframe using built-in interpolate method使用内置插值方法线性外推熊猫数据框
【发布时间】:2021-07-27 16:53:43
【问题描述】:

考虑以下数据框:

df = pd.DataFrame([np.nan, np.nan,1, 5,np.nan, 6, 6.1 , np.nan,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, 1 , 7, 8]
print(f(x))
[-7.  -3. 6.2 6.3]

似乎 pandas interpolate 中的“线性”选项调用了不做线性外推的 numpy 的插值方法。有没有办法调用内置的 interpolate 方法来实现这一点?

【问题讨论】:

    标签: pandas interpolation extrapolation


    【解决方案1】:

    您可以直接在 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

    【讨论】:

      猜你喜欢
      • 2015-03-15
      • 1970-01-01
      • 2015-08-12
      • 2019-07-25
      • 1970-01-01
      • 2020-03-07
      • 2019-05-21
      • 1970-01-01
      • 2019-01-25
      相关资源
      最近更新 更多