当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python pandas.DataFrame.interpolate用法及代码示例


用法:

DataFrame.interpolate(method='linear', axis=0, limit=None, inplace=False, limit_direction=None, limit_area=None, downcast=None, **kwargs)

使用插值方法填充 NaN 值。

请注意,具有 MultiIndex 的 DataFrame/Series 仅支持 method='linear'

参数

methodstr,默认 ‘linear’

要使用的插值技术。之一:

  • ‘linear’:忽略索引并将值视为等距。这是 MultiIndexes 上唯一支持的方法。

  • ‘time’:处理每日和更高分辨率的数据以插入给定的间隔长度。

  • ‘index’, ‘values’:使用索引的实际数值。

  • ‘pad’:使用现有值填充 NaN。

  • ‘nearest’, ‘zero’, ‘slinear’, ‘quadratic’, ‘cubic’, ‘spline’, ‘barycentric’, ‘polynomial’:传递给 scipy.interpolate.interp1d 。这些方法使用索引的数值。 ‘polynomial’ and ‘spline’ 都要求您还指定 order (int),例如df.interpolate(method='polynomial', order=5)

  • ‘krogh’, ‘piecewise_polynomial’、‘spline’, ‘pchip’, ‘akima’, ‘cubicspline’:类似名称的 SciPy 插值方法的包装器。请参阅Notes

  • ‘from_derivatives’:指的是scipy.interpolate.BPoly.from_derivatives,它替换了scipy 0.18中的‘piecewise_polynomial’插值方法。

axis{{0 or ‘index’, 1 or ‘columns’, None}},默认无

沿插值的轴。

limit整数,可选

要填充的最大连续 NaN 数。必须大于 0。

inplace布尔值,默认为 False

如果可能,更新数据。

limit_direction{{‘forward’, ‘backward’, ‘both’}},可选

连续的 NaN 将朝这个方向填充。

如果指定了限制:
  • 如果‘method’ 是‘pad’ or ‘ffill’,则‘limit_direction’ 必须是‘forward’。

  • 如果‘method’ 是‘backfill’ or ‘bfill’,则‘limit_direction’ 必须是‘backwards’。

如果未指定‘limit’:
  • 如果‘method’为‘backfill’ or ‘bfill’,则默认为‘backward’

  • 否则默认为‘forward’

limit_area

{{ None , ‘inside’, ‘outside’}},默认无

如果指定了限制,则连续的 NaN 将被此限制填充。

  • None :没有填充限制。

  • ‘inside’:仅填充由有效值包围的 NaN(插值)。

  • ‘outside’:仅在有效值之外填充 NaN(外推)。

downcast可选,‘infer’ 或无,默认为无

如果可能的话,向下转换 dtypes。

``**kwargs``可选的

要传递给插值函数的关键字参数。

返回

Series 或 DataFrame 或 None

返回与调用者相同的对象类型,在部分或全部 NaN 值或 None 如果 inplace=True 插值。

注意

‘krogh’, ‘piecewise_polynomial’、‘spline’, ‘pchip’ and ‘akima’ 方法是类似名称的各自 SciPy 实现的包装器。这些使用索引的实际数值。有关其行为的更多信息,请参阅 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,但一次最多填充两个连续的NaN

>>> s = pd.Series([np.nan, "single_one", np.nan,
...                "fill_two_more", np.nan, np.nan, np.nan,
...                4.71, np.nan])
>>> s
0              NaN
1       single_one
2              NaN
3    fill_two_more
4              NaN
5              NaN
6              NaN
7             4.71
8              NaN
dtype:object
>>> s.interpolate(method='pad', limit=2)
0              NaN
1       single_one
2       single_one
3    fill_two_more
4    fill_two_more
5    fill_two_more
6              NaN
7             4.71
8             4.71
dtype:object

通过多项式插值或样条在系列中填充NaN:两种‘polynomial’ and ‘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

相关用法


注:本文由纯净天空筛选整理自pandas.pydata.org大神的英文原创作品 pandas.DataFrame.interpolate。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。