使用内置插值方法线性外推 pandas 数据帧
linearly extrapolate pandas dataframe using built-in interpolate method
考虑以下数据框:
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
中的 'linear' 选项似乎调用了 numpy 的 interpolate 方法,该方法不进行线性外推。有没有办法调用内置的插值方法来实现这个?
可以直接在pandas中使用scipy插值方法。请参阅 pandas.DataFrame.interpolate 文档,您可以使用 scipy.interpolate.interp1d 中的 method
选项技术,如附件 link 中所述。 =22=]
您的示例的解决方案可能如下所示:
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
然后您可以轻松 select 您感兴趣的任何值,例如df_interpolated.loc[x]
(其中 df_interpolated
是前一个代码块的输出)使用在您的问题中由 x
变量定义的索引。
解释:
method="slinear"
- 上面 pandas 文档中列出的方法之一被传递给 scipy interp1d
(见例如 this link)
fill_value="extrapolate"
- 传递 scipy 允许的任何选项(此处推断这正是您想要的)
limit_direction="both"
- 在两个方向上进行外推(否则在这种情况下默认设置为“forward”,你会看到 np.nan
前两个值)
考虑以下数据框:
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
中的 'linear' 选项似乎调用了 numpy 的 interpolate 方法,该方法不进行线性外推。有没有办法调用内置的插值方法来实现这个?
可以直接在pandas中使用scipy插值方法。请参阅 pandas.DataFrame.interpolate 文档,您可以使用 scipy.interpolate.interp1d 中的 method
选项技术,如附件 link 中所述。 =22=]
您的示例的解决方案可能如下所示:
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
然后您可以轻松 select 您感兴趣的任何值,例如df_interpolated.loc[x]
(其中 df_interpolated
是前一个代码块的输出)使用在您的问题中由 x
变量定义的索引。
解释:
method="slinear"
- 上面 pandas 文档中列出的方法之一被传递给 scipyinterp1d
(见例如 this link)fill_value="extrapolate"
- 传递 scipy 允许的任何选项(此处推断这正是您想要的)limit_direction="both"
- 在两个方向上进行外推(否则在这种情况下默认设置为“forward”,你会看到np.nan
前两个值)