pandas.core.resample.Resampler.fillna
-
Resampler.fillna(self, method, limit=None)[source] -
Заполнение пропущенных значений, возникающих при увеличении частоты выборки.
В статистике импутация — это процесс замены пропущенных данных замещающими значениями [1]. При пересэмплировании данных могут появиться пропущенные значения (например, когда частота пересэмплирования выше, чем исходная частота).
Пропущенные значения, существовавшие в исходных данных, не будут изменены.
Параметры: -
method : {‘pad’, ‘backfill’, ‘ffill’, ‘bfill’, ‘nearest’} -
Метод заполнения пропусков в пересэмплированных данных
- ‘pad’ или ‘ffill’: заполнение с помощью предыдущего действительного значения (заполнение вперед).
- ‘backfill’ или ‘bfill’: заполнение с помощью следующего действительного значения.
- ‘nearest’: заполнение с помощью ближайшего действительного значения.
-
limit : integer, optional -
Предел количества последовательных пропущенных значений для заполнения.
Возвращает: - Серия или DataFrame
-
Пересэмплированная серия или DataFrame с заполненными пропущенными значениями.
См. также
-
backfill - Заполнение пропущенных значений в данных после пересэмплирования.
-
pad - Заполнение пропущенных значений в пересэмплированных данных с помощью значения перед пропусками.
-
nearest - Заполнение пропущенных значений в пересэмплированных данных ближайшим значением, начиная с центра.
-
interpolate - Заполнение пропущенных значений с помощью интерполяции.
-
Series.fillna - Заполнение пропущенных значений в серии указанным методом, который может быть ‘bfill’ и ‘ffill’.
-
DataFrame.fillna - Заполнение пропущенных значений в DataFrame указанным методом, который может быть ‘bfill’ и ‘ffill’.
Ссылки
[1] https://en.wikipedia.org/wiki/Imputation_(statistics) Примеры
Пересэмплирование серии:
>>> 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: 30T, 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: 30T, 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: 15T, 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: 30T, 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: 30T, 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: 30T, 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: 30T, 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: 30T, 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 -
© 2008–2012, AQR Capital Management, LLC, Lambda Foundry, Inc. and PyData Development Team
Licensed under the 3-clause BSD License.
https://pandas.pydata.org/pandas-docs/version/0.25.0/reference/api/pandas.core.resample.Resampler.fillna.html