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