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 : 使用插值技术。之一: ‘linear’:忽略索引,并将值等距地对待。 这是MultiIndexes支持的唯一方法。 ‘time’: 处理每日和更高分辨率的数据, 以内插给定的时间间隔长度。 ‘index’, ‘values’: 使用索引的实际数值。 'pad':使用现有值填写NaN。 ‘nearest’, ‘zero’, ‘slinear’, ‘quadratic’, ‘cubic’, ‘spline’, ‘barycentric’, ‘polynomial’: 传递给 这些方法使用索引的数值。 和 例如 ,
'krogh','piecewise_polynomial','spline', 'pchip','akima': 环绕类似名称的SciPy插值方法。请参阅注释。 'from_derivatives': 指 它替换了scipy 0.18中的 插值方法。 0.18.1版中的新功能:添加了对 添加了插值方法 该方法替换了SciPy 0.18中的 向后兼容, axis : { 默认为 沿轴进行interpolate。 limit : 整数,可选 要填充的连续NaN的最大数量。必须大于 inplace : 尽可能更新数据。 limit_direction : 默认为 如果指定了限制,则将沿该方向填充连续的NaN。 limit_area : { 默认为 如果指定了限制,则连续的
0.23.0版中的新功能。 downcast : 可选, 默认为 如果可能,请向下转换dtype。 **kwargs 关键字参数传递给插值函数。 |
返回值: |
返回与调用方相同的对象类型, 并以部分或全部 |
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)