當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。