pandas.core.resample.Resampler.fillna#

final Resampler.fillna(method, limit=None)[源代码]#

填充由上采样引入的缺失值。

在统计学中,插补(imputation)是用替换值替换缺失数据值的过程 [1]。在重采样数据时,可能会出现缺失值(例如,当重采样频率高于原始频率时)。

原始数据中存在的缺失值将不会被修改。

Parameters:
<strong>method</strong>{‘pad’, ‘backfill’, ‘ffill’, ‘bfill’, ‘nearest’}

用于填充重采样数据中空缺的方法。

  • ‘pad’ 或 ‘ffill’:使用上一个有效观测值填充空隙(前向填充)。

  • ‘backfill’ 或 ‘bfill’:使用下一个有效观测值填充空隙。

  • ‘nearest’:使用最近的有效观测值填充空隙。

<strong>limit</strong>int, optional

连续缺失值填充的上限。

Returns:
Series 或 DataFrame

一个向上采样后的 Series 或 DataFrame,其中包含填充后的缺失值。

参见

bfill

向后填充重采样数据中的 NaN 值。

ffill

向前填充重采样数据中的 NaN 值。

nearest

从中心开始,用最近邻值填充重采样数据中的 NaN 值。

interpolate

使用插值填充 NaN 值。

Series.fillna

使用指定的方法填充 Series 中的 NaN 值,该方法可以是 ‘bfill’ 和 ‘ffill’。

DataFrame.fillna

使用指定的方法填充 DataFrame 中的 NaN 值,该方法可以是 ‘bfill’ 和 ‘ffill’。

参考文献

Examples

重采样 Series:

>>> s = pd.Series([1, 2, 3],
...               index=pd.date_range('20180101', periods=3, freq='h'))
>>> s
2018-01-01 00:00:00    1
2018-01-01 01:00:00    2
2018-01-01 02:00:00    3
Freq: h, dtype: int64

如果不填充缺失值,您将得到:

>>> s.resample("30min").asfreq()
2018-01-01 00:00:00    1.0
2018-01-01 00:30:00    NaN
2018-01-01 01:00:00    2.0
2018-01-01 01:30:00    NaN
2018-01-01 02:00:00    3.0
Freq: 30min, dtype: float64
>>> s.resample('30min').fillna("backfill")
2018-01-01 00:00:00    1
2018-01-01 00:30:00    2
2018-01-01 01:00:00    2
2018-01-01 01:30:00    3
2018-01-01 02:00:00    3
Freq: 30min, dtype: int64
>>> s.resample('15min').fillna("backfill", limit=2)
2018-01-01 00:00:00    1.0
2018-01-01 00:15:00    NaN
2018-01-01 00:30:00    2.0
2018-01-01 00:45:00    2.0
2018-01-01 01:00:00    2.0
2018-01-01 01:15:00    NaN
2018-01-01 01:30:00    3.0
2018-01-01 01:45:00    3.0
2018-01-01 02:00:00    3.0
Freq: 15min, dtype: float64
>>> s.resample('30min').fillna("pad")
2018-01-01 00:00:00    1
2018-01-01 00:30:00    1
2018-01-01 01:00:00    2
2018-01-01 01:30:00    2
2018-01-01 02:00:00    3
Freq: 30min, dtype: int64
>>> s.resample('30min').fillna("nearest")
2018-01-01 00:00:00    1
2018-01-01 00:30:00    2
2018-01-01 01:00:00    2
2018-01-01 01:30:00    3
2018-01-01 02:00:00    3
Freq: 30min, dtype: int64

上采样之前的缺失值不受影响。

>>> sm = pd.Series([1, None, 3],
...                index=pd.date_range('20180101', periods=3, freq='h'))
>>> sm
2018-01-01 00:00:00    1.0
2018-01-01 01:00:00    NaN
2018-01-01 02:00:00    3.0
Freq: h, dtype: float64
>>> sm.resample('30min').fillna('backfill')
2018-01-01 00:00:00    1.0
2018-01-01 00:30:00    NaN
2018-01-01 01:00:00    NaN
2018-01-01 01:30:00    3.0
2018-01-01 02:00:00    3.0
Freq: 30min, dtype: float64
>>> sm.resample('30min').fillna('pad')
2018-01-01 00:00:00    1.0
2018-01-01 00:30:00    1.0
2018-01-01 01:00:00    NaN
2018-01-01 01:30:00    NaN
2018-01-01 02:00:00    3.0
Freq: 30min, dtype: float64
>>> sm.resample('30min').fillna('nearest')
2018-01-01 00:00:00    1.0
2018-01-01 00:30:00    NaN
2018-01-01 01:00:00    NaN
2018-01-01 01:30:00    3.0
2018-01-01 02:00:00    3.0
Freq: 30min, dtype: float64

DataFrame 重采样是按列进行的。所有相同的选项都可用。

>>> df = pd.DataFrame({'a': [2, np.nan, 6], 'b': [1, 3, 5]},
...                   index=pd.date_range('20180101', periods=3,
...                                       freq='h'))
>>> df
                       a  b
2018-01-01 00:00:00  2.0  1
2018-01-01 01:00:00  NaN  3
2018-01-01 02:00:00  6.0  5
>>> df.resample('30min').fillna("bfill")
                       a  b
2018-01-01 00:00:00  2.0  1
2018-01-01 00:30:00  NaN  3
2018-01-01 01:00:00  NaN  3
2018-01-01 01:30:00  6.0  5
2018-01-01 02:00:00  6.0  5