Pandas.Period🕰
В первую рабочую неделю мне вдруг понадобилось немного поработать с временными данными: создать определенный диапазон дат и поверх него построить витрину с метриками.
Обычно, для этого я генерировал все диапазоны дат вручную. Но сейчас наткнулся на класс Period в pandas и понял, что в этом нет необходимости. Мб он и вам будет полезен.
В чем его суть?
В общем и целом, класс Period представляет собой промежуток времени или интервал. Например, если мы хотим вытащить все даты за март 2025 года целиком, то достаточно создать объект функцией ниже и вы сразу получите набор всех необходимых вам дат.
period_month = pd.Period('2025-03', freq='M')
Тоже самое можно сделать за квартал или день period_quarter = pd.Period('2023Q1', freq='Q') print(period_quarter) # 2023Q1
#День period_day = pd.Period('2023-03-15', freq='D')
Главный параметр - freq (частота): M для месяца, Q для квартала, Y для года, D для дня, W для недели.
У класса достаточно много применений. Детально с ним можно ознакомиться в официальной доке.
Я расскажу про некоторые из них.
PeriodIndex
Например, когда вы анализируете данные по месяцам, можно создать PeriodIndex.
PeriodIndex - это просто набор объектов Period. Вместо использования временных меток он помогает структурировать данные по временным интервалам, будь то месяцы, кварталы или годы.
Например:
dates = pd.period_range(start='2023-01', periods=6, freq='M') df = pd.DataFrame({'Sales': [100, 150, 200, 250, 300, 350]}, index=dates)
Результат: Sales 2023-01 100 2023-02 150 2023-03 200 2023-04 250 2023-05 300 2023-06 350
Каждая строка теперь представляет целый месяц, а не конкретную дату. Это упрощает агрегацию и анализ периодических данных. Конвертация между Period и Timestamp
Иногда нужно превратить Period в конкретную дату. В этом тоже нет ничего сложного:
period = pd.Period('2023-03', freq='M')
#Начало периодаperiod.to_timestamp() # 2023-03-01 00:00:00
#Конец периодаperiod.to_timestamp(how='end') # 2023-03-31 23:59:59
#Обратная конвертация - из Timestamp в Period:timestamp = pd.Timestamp('2023-03-15') period = timestamp.to_period('M') print(period) # 2023-03
Арифметика с Period
Можно двигаться между периодами:
period = pd.Period('2023-03', freq='M') print(period + 1) # 2023-04 print(period - 1) # 2023-02
Для недели: week_period = pd.Period('2023-07-10', freq='W') print(week_period + 1) # Следующая неделя
Начало и конец периода: period.start_time # 2023-03-01 00:00:00 period.end_time # 2023-03-31 23:59:59
Итого -> Period - это абстракция для работы с временными интервалами. Вместо точных дат вы работаете с целыми периодами.
-> Используйте Period когда анализируете данные по месяцам, кварталам, годам или строите отчетность по периодам.
p.s. сейчас я делаю достаточно интересную работу, результатами которой поделюсь в ближайшее время. Она не связана напрямую с аналитикой данных, но думаю, многим она будет полезна. Ждите апдейтов😉