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
关键字参数传递给插值函数。
返回值:Series 或 DataFrame
返回与调用方相同的对象类型,
并以部分或全部NaN值进行插值。
Notes
‘krogh’, ‘piecewise_polynomial’, ‘spline’, ‘pchip’ 和‘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通过多项式插值或样条曲线填充系列:'多项式'和'样条曲线'方法都要求您还指定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