Метод asfreq
Метод asfreq применяется к DataFrame
с индексом типа DatetimeIndex и возвращает новый
объект с измененной частотой. Первым параметром передается
новая частота (строка или объект DateOffset),
вторым - метод заполнения пропусков.
Если метод не указан, отсутствующие значения заполняются
NaN. Метод часто используется для приведения
данных к единой временной сетке перед анализом.
Синтаксис
df.asfreq(freq, method=None, fill_value=None)
Пример
Давайте изменим частоту индекса с дней на часы:
import pandas as pd
dates = pd.date_range('2026-01-01', periods=3, freq='D')
df = pd.DataFrame({
'a': [1, 2, 3],
'b': [10, 20, 30]
}, index=dates)
res = df.asfreq('H')
print(res)
Результат выполнения кода:
a b
2026-01-01 00:00:00 1.0 10.0
2026-01-01 01:00:00 NaN NaN
2026-01-01 02:00:00 NaN NaN
2026-01-01 03:00:00 NaN NaN
2026-01-01 04:00:00 NaN NaN
2026-01-01 05:00:00 NaN NaN
2026-01-01 06:00:00 NaN NaN
2026-01-01 07:00:00 NaN NaN
2026-01-01 08:00:00 NaN NaN
2026-01-01 09:00:00 NaN NaN
2026-01-01 10:00:00 NaN NaN
2026-01-01 11:00:00 NaN NaN
2026-01-01 12:00:00 NaN NaN
2026-01-01 13:00:00 NaN NaN
2026-01-01 14:00:00 NaN NaN
2026-01-01 15:00:00 NaN NaN
2026-01-01 16:00:00 NaN NaN
2026-01-01 17:00:00 NaN NaN
2026-01-01 18:00:00 NaN NaN
2026-01-01 19:00:00 NaN NaN
2026-01-01 20:00:00 NaN NaN
2026-01-01 21:00:00 NaN NaN
2026-01-01 22:00:00 NaN NaN
2026-01-01 23:00:00 NaN NaN
2026-01-02 00:00:00 2.0 20.0
Пример
Теперь используем параметр method для заполнения
пропусков значением из предыдущей доступной строки:
import pandas as pd
dates = pd.date_range('2026-01-01', periods=3, freq='D')
df = pd.DataFrame({
'a': [1, 2, 3],
'b': [10, 20, 30]
}, index=dates)
res = df.asfreq('H', method='ffill')
print(res.head(10))
Результат выполнения кода:
a b
2026-01-01 00:00:00 1.0 10.0
2026-01-01 01:00:00 1.0 10.0
2026-01-01 02:00:00 1.0 10.0
2026-01-01 03:00:00 1.0 10.0
2026-01-01 04:00:00 1.0 10.0
2026-01-01 05:00:00 1.0 10.0
2026-01-01 06:00:00 1.0 10.0
2026-01-01 07:00:00 1.0 10.0
2026-01-01 08:00:00 1.0 10.0
2026-01-01 09:00:00 1.0 10.0
Пример
А теперь зададим заполнение пропусков конкретным значением
с помощью параметра fill_value:
import pandas as pd
dates = pd.date_range('2026-01-01', periods=3, freq='D')
df = pd.DataFrame({
'a': [1, 2, 3],
'b': [10, 20, 30]
}, index=dates)
res = df.asfreq('H', fill_value=0)
print(res.head(10))
Результат выполнения кода:
a b
2026-01-01 00:00:00 1.0 10.0
2026-01-01 01:00:00 0.0 0.0
2026-01-01 02:00:00 0.0 0.0
2026-01-01 03:00:00 0.0 0.0
2026-01-01 04:00:00 0.0 0.0
2026-01-01 05:00:00 0.0 0.0
2026-01-01 06:00:00 0.0 0.0
2026-01-01 07:00:00 0.0 0.0
2026-01-01 08:00:00 0.0 0.0
2026-01-01 09:00:00 0.0 0.0
Смотрите также
-
метод
resample,
который агрегирует данные по новой частоте -
метод
reindex,
который изменяет индекс с возможностью заполнения -
метод
ffill,
который заполняет пропуски предыдущими значениями -
метод
interpolate,
который интерполирует пропущенные значения