pandas.DataFrame.interpolate # 数据框。interpolate ( method = '线性' , * , axis = 0 , limit = None , inplace = False , limit_direction = None , limit_area = None , downcast = _NoDefault.no_default , ** kwargs ) [来源] # 使用插值方法填充 NaN 值。 请注意,仅method='linear'支持具有多重索引的 DataFrame/Series。 参数: 方法str,默认“线性”要使用的插值技术。之一: '线性':忽略索引并将值视为等距。这是多索引支持的唯一方法。 “时间”:适用于每日数据和更高分辨率的数据,以插入给定的间隔长度。 'index', 'values':使用索引的实际数值。 'pad':使用现有值填充 NaN。 'nearest'、'zero'、'slinear'、'quadratic'、'cubic'、'barycentric'、'polynomial':传递给 scipy.interpolate.interp1d,而 'spline' 传递给 scipy.interpolate.UnivariateSpline。这些方法使用指数的数值。 “多项式”和“样条曲线”都要求您还指定一个阶数(int),例如 。请注意, Pandas 中的线性方法是指 Scipy 一阶样条 而不是 Pandas 一阶样条。df.interpolate(method='polynomial', order=5) 'krogh'、'piecewise_polynomial'、'spline'、'pchip'、'akima'、'cubicspline':类似名称的 SciPy 插值方法的包装。参见注释。 'from_derivatives':指 scipy.interpolate.BPoly.from_derivatives。 axis {{0 或 'index', 1 或 'columns', None}}, 默认 None沿其插补的轴。对于系列,此参数未使用,默认为 0。 限制int,可选要填充的连续 NaN 的最大数量。必须大于 0。 inplace布尔值,默认 False如果可能的话更新数据。 limit_direction {{'向前', '向后', '两者'}}, 可选连续的 NaN 将按此方向填充。 如果指定限制: 如果“method”为“pad”或“ffill”,则“limit_direction”必须为“forward”。 如果“method”为“backfill”或“bfill”,则“limit_direction”必须为“backwards”。 如果未指定“限制”: 如果“method”为“backfill”或“bfill”,则默认为“backward” 否则默认为“前进” 如果limit_direction为“forward”或“both”,则引发 ValueError方法是“backfill”或“bfill”。 如果limit_direction为“向后”或“两者”,则引发 ValueError方法是“pad”或“fill”。 limit_area {{ None , 'inside', 'outside'}}, 默认 None如果指定了 limit,则连续的 NaN 将用此限制填充。 None:无填充限制。 'inside':仅填充由有效值包围的 NaN(插值)。 'outside':仅填充有效值之外的 NaN(推断)。 downcast可选,'infer' 或 None,默认为 None如果可能的话,向下转换数据类型。 自 2.1.0 版本起已弃用。 ``**kwargs``可选要传递给插值函数的关键字参数。 返回: 系列或数据框或无返回与调用者相同的对象类型,在某些或所有NaN值处进行插值,如果是则为 None inplace=True。 也可以看看 fillna使用不同的方法填充缺失值。 scipy.interpolate.Akima1DInterpolator分段三次多项式(Akima 插值器)。 scipy.interpolate.BPoly.from_derivatives伯恩斯坦基的分段多项式。 scipy.interpolate.interp1d插值一维函数。 scipy.interpolate.KroghInterpolator插值多项式(Krogh 插值器)。 scipy.interpolate.PchipInterpolatorPCHIP 一维单调三次插值。 scipy.interpolate.CubicSpline三次样条数据插值器。 笔记 'krogh'、'piecewise_polynomial'、'spline'、'pchip' 和 'akima' 方法是类似名称的相应 SciPy 实现的包装器。这些使用索引的实际数值。有关其行为的更多信息,请参阅 SciPy 文档。 例子 NaN通过Series线性插值填充。 >>> 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 通过多项式插值或样条函数填充NaN系列:“多项式”和“样条函数”方法都要求您还指定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