pandas.core.resample.Resampler.fillna # 最终 重采样器。fillna (方法, limit = None ) [来源] # 填充上采样引入的缺失值。 在统计学中,插补是用替代值替换缺失数据的过程[1]。当对数据进行重采样时,可能会出现缺失值(例如,当重采样频率高于原始频率时)。 原始数据中存在的缺失值不会被修改。 参数: 方法{'pad', 'backfill', 'ffill', 'bfill', 'nearest'}用于填充重采样数据中的漏洞的方法 'pad' 或 'ffill':使用先前的有效观察来填充间隙(前向填充)。 'backfill' 或 'bfill':使用下一个有效观察来填补空白。 'nearest':使用最近的有效观察来填补空白。 限制int,可选要填充的连续缺失值的数量限制。 返回: 系列或数据框填充了缺失值的上采样系列或数据帧。 也可以看看 bfill在重采样数据中向后填充 NaN 值。 ffill在重采样数据中前向填充 NaN 值。 nearest使用从中心开始的最近邻填充重采样数据中的 NaN 值。 interpolate使用插值填充 NaN 值。 Series.fillna使用指定的方法填充Series中的NaN值,可以是“bfill”和“ffill”。 DataFrame.fillna使用指定的方法填充 DataFrame 中的 NaN 值,可以是 'bfill' 和 'ffill'。 参考 [ 1 ] https://en.wikipedia.org/wiki/Imputation_(统计) 例子 对系列进行重新采样: >>> 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