Финансовый год – Определение финансового года в Pandas

Узнайте всё о фискальном году в Pandas! Библиотека Pandas делает получение информации о датах достаточно простым процессом — однако определение финансового года требует чуть больше усилий и не всегда интуитивно понятно. В этой статье я постараюсь объяснить этот процесс простым языком.

К концу этой статьи вы узнаете, как:

  • Использовать метод .to_period() из Pandas для преобразования дат в разные временные периоды,

  • Использовать метод .qyear() из Pandas для расчёта годов на основе разных стартовых месяцев,

  • Форматировать фискальные годы в Pandas различными способами.

Кратко говоря, можно написать:

df['Date'].dt.to_period('Q-MAR').dt.qyear.apply(lambda x: str(x-1) + "-" + str(x))

Содержание

Загрузка примера набора данных для работы с фискальным годом в Pandas

Начнём с загрузки набора данных, содержащего различные временные периоды. Мы импортируем библиотеку Pandas и выведем первые пять записей, чтобы понять, что представляет собой данные:

import pandas as pd

dates = {'Date': ['1/1/2021', '1/31/2021', '2/1/2021', '2/28/2021', '3/1/2021', '3/31/2021', '4/1/2021', '4/30/2021', '5/1/2021', '5/31/2021', '6/1/2021']}

df = pd.DataFrame(dates)
df['Date'] = pd.to_datetime(df['Date'])

print(df)

По умолчанию, мы можем получить доступ к календарному году с помощью аксессора .dt.year. Давайте посмотрим, как это сделать — извлечём календарный год и поместим его в отдельный столбец. Создадим новый столбец с названием Year и присвоим ему значение года:

df['Year'] = df['Date'].dt.year
print(df)

Ознакомьтесь с другими уроками Python на сайте datagy, включая наше полное руководство по оформлению таблиц в Pandas и подробный обзор сводных таблиц (Pivot Tables) в Pandas!

Pandas .to_period() — преобразование дат в разные временные периоды

Библиотека Pandas позволяет легко преобразовывать данные типа дата и время в различные временные периоды. С помощью метода .to_period() можно переводить значения дат в кварталы, месяцы, годы и другие периоды. Давайте рассмотрим это на примере.

Преобразуем значения дат в кварталы, считая первым месяцем года апрель (это означает, что мы будем использовать строку 'Q-MAR', где Q обозначает квартал, а MAR указывает, что финансовый год заканчивается в марте):

df['As Quarter'] = df['Date'].dt.to_period('Q-MAR')
print(df)

Мы создали новый столбец ("Quarter"), который использует апрель в качестве первого месяца года и объединяет значения по кварталам, где период с апреля по июнь считается первым кварталом.

Pandas .qyear() — расчёт годов на основе разных стартовых месяцев

Теперь, когда мы преобразовали данные с помощью метода .to_period(), давайте извлечём только год. Может возникнуть желание воспользоваться аксессором .dt.year, но в этом случае будет возвращаться календарный год. Вместо этого Pandas предоставляет удобный метод .qyear(), который возвращает год на основе заданного начального квартала. Если бы мы не выполняли преобразование данных с помощью .to_period(), результаты методов .year и .qyear() совпадали бы.

Примечание! Pandas возвращает год окончания финансового периода.

Рассмотрим это на примере:

df['Fiscal Year'] = df['As Quarter'].dt.qyear
print(df)

Обратите внимание, что мы можем записать всё это в одну строку, объединив методы:

df['Fiscal Year'] = df['Date'].dt.to_period('Q-MAR').dt.qyear

Форматирование фискального года в Pandas

По умолчанию Pandas извлекает только первый год фискального года. Если ваш фискальный год не совпадает с календарным (январь–декабрь), он всегда будет охватывать два календарных года. Для лучшей идентификации может быть полезно включить оба года в названии. Давайте создадим новый столбец, в котором годы будут отображаться в формате: 2021-2022:

df['Fiscal Year Range'] = df['Date'].dt.to_period('Q-APR').dt.qyear.apply(lambda x: str(x-1) + "-" + str(x))
print(df)

Заключение

В этой статье вы узнали, как рассчитывать пользовательские фискальные годы в Pandas с помощью преобразования временных рядов методом .to_period() и извлечения года с помощью метода .qyear(). Также вы научились форматировать годы в различные виды для удобства отображения.

Для получения дополнительной информации ознакомьтесь с официальной документацией по методам .to_period() и .qyear().

Дополнительные ресурсы

Чтобы узнать больше по смежным темам, ознакомьтесь со следующими материалами:

Last updated