Главные объекты для работы с датой и временем в Pandas
Модели машинного обучения, базирующиеся на временных рядах, требуют хороших навыков обработки даты и времени. В этой статье рассмотрим основные объекты, представляющий необходимый функционал в Pandas.
Метки даты и времени
Для меток даты и времени в Pandas предназначен тип Timestamp - аналог datetime.datetime из стандартной библиотеки Python и основанный на типе numpy.datetime64. Конструкция из нескольких Timestamp называется DatetimeIndex. Проще всего создать Timestamp, используя строчную нотацию:
pd.Timestamp('2017-01-01 12:23:34') pd.DatetimeIndex(['2017-01-01 12:23:34', '2015-01-06 12:1:34', '2018-11-01 12:23:4'])[2]
Чтобы сгенерировать диапазон Timestamp, следует воспользоваться функцией date_range. На вход ей можно задать комбинацию из трех параметров среди следующих: start, end, periods, freq (начало, конец, количество периодов, частота):
Период времени
Соответствующий объект представлен классом Period, который основан на типе numpy.datetime64. Список "периодов" хранится в PeriodIndex.
pd.Period('4Q2005') pd.PeriodIndex(['4Q2005', '4Q2006', '4Q2007'], freq='Q-DEC')[1]
Справочник значений частот можно найти в официальной документации. Для генерации диапазонов периодов удобно использовать функцию period_range:
# pr = pd.period_range('2021-02-01', periods=10, freq='S') pr = pd.period_range('2021-02-01', '2021-03-01', freq='D') pr
Как можно заметить, в period_range мы вольны использовать любую из двух комбинаций параметров: начало периода, их количество + частота или начало и конец периода + частота.
Временные промежутки
Для временных продолжительностей существует специальный тип Timedelta - аналог datetime.timedelta и основанный на numpy.timedelta64. Массив таких объектов - TimedeltaIndex по аналогии с временными метками может быть создан путем вызова функции timedelta_range с тройкой из параметров start, end, periods, freq (начало, конец, количество периодов, частота):
pd.options.display.max_seq_items = 15 # td = pd.timedelta_range('1 days', '5 days', freq='H') # td = pd.timedelta_range('1 days', periods=10, freq='H') td = pd.timedelta_range('1 days', '5 days', periods=1) td