pandas.DataFrame.interpolate 方法用于插补缺失数据。它通过线性插值、时间插值或其他方法填充缺失的数值。此方法可对单列或多列的数据进行插补。本文主要介绍一下Pandas中pandas.DataFrame.interpolate方法的使用。

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

根据不同的方法插值。

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

参数:

method : str,默认为‘linear’

使用插值技术。之一:

‘linear’:忽略索引,并将值等距地对待。

这是MultiIndexes支持的唯一方法。

‘time’: 处理每日和更高分辨率的数据,

以内插给定的时间间隔长度。

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

'pad':使用现有值填写NaN。

‘nearest’, ‘zero’, ‘slinear’, ‘quadratic’, ‘cubic’, 

‘spline’, ‘barycentric’, ‘polynomial’:  

传递给 scipy.interpolate.interp1d

这些方法使用索引的数值。‘polynomial’ 

‘spline’ 都要求还指定一个顺序(int),

例如 ,

df.interpolate(method='polynomial', order=5)

'krogh','piecewise_polynomial','spline',

'pchip','akima'

环绕类似名称的SciPy插值方法。请参阅注释。

'from_derivatives':

指 scipy.interpolate.BPoly.from_derivatives

它替换了scipy 0.18中的'piecewise_polynomial'

插值方法。

0.18.1版中的新功能:添加了对 ‘akima’方法的支持。

添加了插值方法 ‘from_derivatives’ ,

该方法替换了SciPy 0.18中的 ‘piecewise_polynomial’

向后兼容,SciPy <0.18

axis : {0'index'1'columns'None},

默认为None

沿轴进行interpolate。

limit : 整数,可选

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

inplace : bool,默认为False

尽可能更新数据。

limit_direction : {'forward','backward','both'}

默认为'forward'

如果指定了限制,则将沿该方向填充连续的NaN。

limit_area : {None, 'inside', 'outside'}, 

默认为None

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

None:无填充限制。

 'inside':仅填充有效值(interpolate)包围的NaN。

'outside': 仅在有效值之外(extrapolate)填充NaN。

0.23.0版中的新功能。

downcast : 可选, ‘infer’  或None

默认为None

如果可能,请向下转换dtype。

**kwargs

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

返回值:

SeriesDataFrame

返回与调用方相同的对象类型,

并以部分或全部NaN值进行插值。

Notes

 ‘krogh’, ‘piecewise_polynomial’, ‘spline’, ‘pchip’ ‘akima’ 方法是类似名称的相应SciPy实现的包装。这些使用索引的实际数值。有关其行为的更多信息,请参见 SciPy文档 和SciPy教程

例子

1)填充NaN在Series通过线性内插

import pandas as pd
import numpy as np

# 创建一个包含缺失值的 Series
s = pd.Series([0, 1, np.nan, 3])

# 输出原始 Series
print("原始 Series:")
print(s)

# 使用插值填充缺失值
s_interpolated = s.interpolate()

# 输出插值后的 Series
print("\n插值后的 Series:")
print(s_interpolated)

2)在填补NaN了一系列的填充,却尽显最多两个连续NaN在同一时间

import pandas as pd
import numpy as np

# 创建一个包含缺失值的 Series
s = pd.Series([np.nan, "single_one", np.nan,
               "fill_two_more", np.nan, np.nan, np.nan,
               4.71, np.nan])

# 输出原始 Series
print("原始 Series:")
print(s)

# 使用向前填充 (pad) 方法填充缺失值,限制填充的数量为2
s_interpolated = s.interpolate(method='pad', limit=2)

# 输出填充后的 Series
print("\n填充后的 Series:")
print(s_interpolated)

3)NaN通过多项式插值或样条曲线填充系列:'多项式'和'样条曲线'方法都要求您还指定order(int)

import pandas as pd
import numpy as np

# 创建一个包含缺失值的 Series
s = pd.Series([0, 2, np.nan, 8])

# 输出原始 Series
print("原始 Series:")
print(s)

# 使用二次多项式插值方法填充缺失值
s_interpolated = s.interpolate(method='polynomial', order=2)

# 输出插值后的 Series
print("\n插值后的 Series:")
print(s_interpolated)

4)使用线性插值沿每列向前(即向下)填充DataFrame

请注意,如何对列“a”中的最后一个条目进行不同的插值,因为在其后没有任何条目可用于插值。请注意,如何保留列'b'中的第一个条目NaN,因为在它之前没有条目可用于插值。

import pandas as pd
import numpy as np

# 创建一个包含缺失值的 DataFrame
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'))

# 输出原始 DataFrame
print("原始 DataFrame:")
print(df)

# 使用线性插值方法,按列进行插值,限制填充方向为前向填充
df_interpolated = df.interpolate(method='linear',
                  limit_direction='forward', axis=0)

# 输出插值后的 DataFrame
print("\n插值后的 DataFrame:")
print(df_interpolated)

5)使用多项式插值

import pandas as pd
import numpy as np

# 创建一个包含缺失值的 DataFrame
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'))

# 输出原始 DataFrame
print("原始 DataFrame:")
print(df)

# 对列 'd' 使用二次多项式插值填充缺失值
d_interpolated = df['d'].interpolate(method='polynomial',
                                    order=2)

# 输出插值后的 'd' 列
print("\n插值后的 'd' 列:")
print(d_interpolated)

推荐文档

相关文档

大家感兴趣的内容

随机列表