pandas.DataFrame.interpolate#
- DataFrame.interpolate(method='linear', *, axis=0, limit=None, inplace=False, limit_direction=None, limit_area=None, **kwargs)[源代码]#
使用插值方法填充NaN值。
请注意,仅支持
method='linear'
用于具有 MultiIndex 的 DataFrame/Series。- 参数:
- 方法str, 默认 ‘linear’
要使用的插值技术。以下之一:
‘linear’: 忽略索引并将值视为等间距。这是唯一在 MultiIndexes 上支持的方法。
‘time’: 适用于每日及更高分辨率的数据,以插值给定的间隔长度。
‘index’, ‘values’: 使用索引的实际数值。
‘nearest’, ‘zero’, ‘slinear’, ‘quadratic’, ‘cubic’, ‘barycentric’, ‘polynomial’: 传递给 scipy.interpolate.interp1d,而 ‘spline’ 传递给 scipy.interpolate.UnivariateSpline。这些方法使用索引的数值。’polynomial’ 和 ‘spline’ 需要你同时指定一个 order`(整数),例如 ``df.interpolate(method=’polynomial’, order=5)`。注意,Pandas 中的 slinear 方法指的是 Scipy 的一阶 spline 而不是 Pandas 的一阶 spline。
‘krogh’, ‘piecewise_polynomial’, ‘spline’, ‘pchip’, ‘akima’, ‘cubicspline’: 围绕类似名称的 SciPy 插值方法的包装器。请参见 Notes。
‘from_derivatives’: 指的是 scipy.interpolate.BPoly.from_derivatives。
- 轴{{0 或 ‘index’, 1 或 ‘columns’, None}}, 默认 None
要插值的轴。对于 Series,此参数未使用并默认为 0。
- 限制int, 可选
要填充的连续 NaN 的最大数量。必须大于 0。
- inplace布尔值, 默认为 False
如果可能,请就地更新数据。
- limit_direction{{‘forward’, ‘backward’, ‘both’}}, 可选, 默认 ‘forward’
连续的 NaNs 将在此方向上填充。
- limit_area : {{None, ‘inside’, ‘outside’}}, 默认 None{{None, ‘inside’, ‘outside’}}, default None
如果指定了限制,连续的 NaN 将被此限制填充。
None
: 没有填充限制。‘inside’: 仅填充被有效值包围的NaN(插值)。
‘outside’: 仅在有效值之外填充NaN(外推)。
- **kwargs可选的
传递给插值函数的关键字参数。
- 返回:
- 系列或数据帧或无
返回与调用者相同类型的对象,在某些或所有
NaN
值处进行插值,如果inplace=True
则返回 None。
参见
fillna
使用不同的方法填充缺失值。
scipy.interpolate.Akima1DInterpolator
分段三次多项式(Akima 插值器)。
scipy.interpolate.BPoly.from_derivatives
在Bernstein基中的分段多项式。
scipy.interpolate.interp1d
插值一个一维函数。
scipy.interpolate.KroghInterpolator
插值多项式(Krogh 插值器)。
scipy.interpolate.PchipInterpolator
PCHIP 1-维单调三次插值。
scipy.interpolate.CubicSpline
三次样条数据插值器。
备注
‘krogh’、‘piecewise_polynomial’、‘spline’、‘pchip’ 和 ‘akima’ 方法是对 SciPy 中类似名称实现的封装。这些方法使用索引的实际数值。有关它们行为的更多信息,请参阅 SciPy 文档。
例子
通过线性插值填充
Series
中的NaN
。>>> s = pd.Series([0, 1, np.nan, 3]) >>> s 0 0.0 1 1.0 2 NaN 3 3.0 dtype: float64 >>> s.interpolate() 0 0.0 1 1.0 2 2.0 3 3.0 dtype: float64
通过多项式插值或样条插值填充 Series 中的
NaN
:’polynomial’ 和 ‘spline’ 方法都需要你指定一个 ``order``(int)。>>> s = pd.Series([0, 2, np.nan, 8]) >>> s.interpolate(method="polynomial", order=2) 0 0.000000 1 2.000000 2 4.666667 3 8.000000 dtype: float64
使用线性插值沿每列向前填充(即向下)DataFrame。
注意列 ‘a’ 中的最后一个条目是如何以不同的方式插值的,因为没有后续条目可供插值使用。注意列 ‘b’ 中的第一个条目仍然是
NaN
,因为没有前一个条目可供插值使用。>>> df = pd.DataFrame( ... [ ... (0.0, np.nan, -1.0, 1.0), ... (np.nan, 2.0, np.nan, np.nan), ... (2.0, 3.0, np.nan, 9.0), ... (np.nan, 4.0, -4.0, 16.0), ... ], ... columns=list("abcd"), ... ) >>> df a b c d 0 0.0 NaN -1.0 1.0 1 NaN 2.0 NaN NaN 2 2.0 3.0 NaN 9.0 3 NaN 4.0 -4.0 16.0 >>> df.interpolate(method="linear", limit_direction="forward", axis=0) a b c d 0 0.0 NaN -1.0 1.0 1 1.0 2.0 -2.0 5.0 2 2.0 3.0 -3.0 9.0 3 2.0 4.0 -4.0 16.0
使用多项式插值。
>>> df["d"].interpolate(method="polynomial", order=2) 0 1.0 1 4.0 2 9.0 3 16.0 Name: d, dtype: float64