Извлечение месяца из даты в pandas

Как извлечь месяц из даты pandas

Содержание статьи

Как извлечь месяц из даты pandas

В pandas работа с датами начинается с корректного преобразования данных в тип datetime. Без этого большинство операций с датами, включая извлечение месяца, будут недоступны или приведут к ошибкам. Для строковых форматов даты рекомендуется использовать pd.to_datetime(), указав параметр format при необходимости точного соответствия шаблону.

Для получения номера месяца из столбца с датой применяется свойство dt.month. Оно возвращает целые числа от 1 до 12, что позволяет сразу использовать их для фильтрации, группировки или построения графиков. Если требуется текстовое представление месяца, применяется dt.strftime(‘%B’), который возвращает полное название месяца на языке системы.

При работе с большими таблицами важно заранее учитывать наличие пропусков и некорректных дат. Методы isna() и fillna() помогают идентифицировать и корректировать такие значения, предотвращая ошибки при последующем анализе.

Извлечённые месяцы удобно сохранять в отдельный столбец, что упрощает фильтрацию данных по месяцам и группировку для суммарных показателей. Такой подход позволяет, например, быстро подсчитать количество продаж или событий по каждому месяцу без дополнительных преобразований.

Преобразование строкового формата даты в datetime

Для работы с месяцами в pandas необходимо, чтобы данные имели тип datetime. Строковые форматы даты сначала преобразуются с помощью pd.to_datetime().

Примеры строковых форматов:

  • «2025-11-16» – стандарт ISO, преобразуется без указания формата.
  • «16/11/2025» – требуется параметр format=»%d/%m/%Y».
  • «Nov 16, 2025» – преобразуется с format=»%b %d, %Y».

Рекомендации при преобразовании:

  1. Использовать errors=’coerce’ для автоматического перевода некорректных дат в NaT, что предотвращает ошибки при дальнейших операциях.
  2. Проверять наличие пропусков после преобразования с помощью isna().sum().
  3. При больших датасетах указывать format ускоряет обработку и снижает нагрузку на память.

После преобразования столбец с датами готов к извлечению месяца через dt.month или dt.strftime(), а также к фильтрации и группировке данных.

Получение номера месяца с помощью свойства dt.month

После преобразования столбца с датами в datetime получить номер месяца можно через свойство dt.month. Оно возвращает целые числа от 1 (январь) до 12 (декабрь), что удобно для фильтрации и анализа.

Пример создания нового столбца с месяцами:

df['месяц'] = df['дата'].dt.month

Практические рекомендации:

  • Для фильтрации данных за конкретный месяц используйте логические условия: df[df[‘дата’].dt.month == 11] – извлекает все строки с ноябрем.
  • При объединении данных из нескольких источников убедитесь, что все даты преобразованы в тип datetime, иначе dt.month вернёт ошибку.
  • Если требуется агрегация по месяцам, создайте столбец с номерами месяцев заранее – это ускоряет операции groupby и подсчёты.

Использование dt.month совместимо с методами fillna() и astype(int), что позволяет корректно обрабатывать пропущенные даты и конвертировать месяц в целый тип для анализа.

Извлечение названия месяца через dt.strftime

Для получения текстового названия месяца используется метод dt.strftime(‘%B’). Он преобразует дату в строку с полным названием месяца на языке системы. Это удобно для отчётов, визуализации и группировки по месяцу.

Пример создания нового столбца с названиями месяцев:

df['название_месяца'] = df['дата'].dt.strftime('%B')

Рекомендации по использованию:

  • Для сокращённых названий месяцев применяйте ‘%b’, например «Jan», «Feb».
  • При объединении данных из разных источников убедитесь, что все даты имеют тип datetime.
  • Используйте unique() для проверки всех присутствующих названий месяцев перед агрегацией или сортировкой.

Пример соответствия номера месяца и названия месяца:

Номер месяца Название месяца
1 January
2 February
3 March
4 April
5 May
6 June
7 July
8 August
9 September
10 October
11 November
12 December

Фильтрация данных по конкретному месяцу

Фильтрация данных по конкретному месяцу

Для извлечения всех записей за определённый месяц используется логическое условие на столбец с датой или с отдельным столбцом месяца. Если столбец имеет тип datetime, применяется dt.month:

df_ноябрь = df[df['дата'].dt.month == 11]

Если создан отдельный столбец с месяцами:

df_ноябрь = df[df['месяц'] == 11]

Фильтрация по текстовым названиям месяцев через столбец с dt.strftime(‘%B’):

df_ноябрь = df[df['название_месяца'] == 'November']

Рекомендации:

  • Используйте copy(), если требуется сохранить фильтрованную таблицу отдельно от исходной: df_ноябрь = df[df[‘месяц’]==11].copy().
  • Для фильтрации нескольких месяцев применяйте метод isin(): df[df[‘месяц’].isin([11,12])].
  • Проверяйте наличие пропущенных дат в столбце с месяцами перед фильтрацией, чтобы избежать потери данных.

Создание нового столбца с месяцами из существующей даты

Новый столбец с месяцами облегчает фильтрацию, группировку и агрегацию данных. Для этого используется существующий столбец с типом datetime.

Пример добавления столбца с номерами месяцев:

df['месяц'] = df['дата'].dt.month

Для текстовых названий месяцев:

df['название_месяца'] = df['дата'].dt.strftime('%B')

Рекомендации:

  • Создавайте столбец до фильтрации и группировки, чтобы ускорить операции groupby.
  • Используйте astype(int), если необходимо сохранить месяц как целое число для вычислений:
  • df['месяц'] = df['дата'].dt.month.astype(int)
  • При наличии пропусков применяйте fillna() или dropna() для корректного формирования столбца.
  • Сохраняйте столбец отдельно от исходного, если планируется комбинировать данные из разных источников.

Обработка пропущенных и некорректных дат

Обработка пропущенных и некорректных дат

Пропущенные значения и некорректные даты мешают извлечению месяца и могут приводить к ошибкам при фильтрации и группировке. Для их обработки применяется параметр errors=’coerce’ в pd.to_datetime(), который переводит некорректные строки в NaT.

Пример преобразования с обработкой ошибок:

df['дата'] = pd.to_datetime(df['дата'], format='%d/%m/%Y', errors='coerce')

Рекомендации по работе с пропусками:

  • Проверяйте количество пропущенных дат с помощью df[‘дата’].isna().sum().
  • Заполняйте пропуски значением по умолчанию для анализа по месяцам: df[‘дата’].fillna(pd.Timestamp(‘2025-01-01’), inplace=True).
  • Или удаляйте строки с некорректными датами, если они не критичны для анализа: df.dropna(subset=[‘дата’], inplace=True).
  • При создании нового столбца с месяцами учитывайте NaT, чтобы избежать ошибок при groupby или фильтрации: df[‘месяц’] = df[‘дата’].dt.month автоматически вернёт NaN для пропущенных значений.

Группировка данных по месяцу для анализа

Группировка по месяцу позволяет быстро получать суммарные показатели, сравнивать значения и строить отчёты. Для этого создайте отдельный столбец с номерами месяцев или названиями через dt.month или dt.strftime(‘%B’).

Пример группировки по номеру месяца с подсчётом количества записей:

df.groupby(df['дата'].dt.month).size()

Пример группировки с суммой значений по месяцу:

df.groupby('месяц')['продажи'].sum()

Рекомендации:

  • Используйте sort_index() после группировки, чтобы месяцы шли в хронологическом порядке.
  • Для текстовых названий месяцев добавляйте категориальный тип pd.Categorical с упорядоченными месяцами, чтобы groupby отражал правильную последовательность.
  • Проверяйте наличие NaT в столбце с месяцами перед группировкой, чтобы исключить пустые строки из анализа.
  • Если требуется объединение нескольких таблиц по месяцам, создавайте единый столбец с номерами месяцев для всех источников.

Сравнение нескольких столбцов с датами по месяцам

При работе с несколькими столбцами дат иногда требуется сравнить их по месяцам для выявления совпадений, задержек или сезонных закономерностей. Для этого удобно создавать отдельные столбцы с месяцами через dt.month или dt.strftime(‘%B’).

Пример сравнения двух столбцов с месяцами:

df['месяц_дата1'] = df['дата1'].dt.month
df['месяц_дата2'] = df['дата2'].dt.month
df['совпадение_месяцев'] = df['месяц_дата1'] == df['месяц_дата2']

Рекомендации:

  • Для текстовых названий используйте одинаковый формат через dt.strftime(‘%B’), чтобы сравнение было корректным.
  • Обрабатывайте пропущенные значения (NaT) перед сравнением, иначе логические операции вернут False для пустых дат.
  • При анализе нескольких столбцов создавайте отдельные столбцы с месяцами для каждого столбца, чтобы ускорить фильтрацию и группировку.
  • Для агрегированных показателей можно применять groupby([‘месяц_дата1’, ‘месяц_дата2’]), чтобы изучить взаимодействие между месяцами разных событий.

Вопрос-ответ:

Как преобразовать столбец с датами в pandas, чтобы извлечь месяц?

Для извлечения месяца столбец с датами должен иметь тип datetime. Если дата хранится в строковом формате, примените pd.to_datetime(). Например: df[‘дата’] = pd.to_datetime(df[‘дата’], format=’%d/%m/%Y’, errors=’coerce’). После этого можно использовать df[‘дата’].dt.month для получения номера месяца или df[‘дата’].dt.strftime(‘%B’) для названия месяца.

Можно ли фильтровать данные сразу по названию месяца?

Да, если создать столбец с текстовыми названиями месяцев через dt.strftime(‘%B’). Например, df[‘название_месяца’] = df[‘дата’].dt.strftime(‘%B’). После этого можно фильтровать строки по конкретному месяцу: df[df[‘название_месяца’] == ‘November’].

Что делать с пропущенными или некорректными датами при извлечении месяца?

Некорректные строки можно преобразовать в NaT с помощью errors=’coerce’ в pd.to_datetime(). Пропуски проверяются через isna(). Их можно заполнить конкретной датой через fillna() или удалить строки с dropna(). Новый столбец с месяцами корректно обработает NaT, возвращая NaN вместо числа.

Как сравнивать месяцы в нескольких столбцах с датами?

Создайте отдельные столбцы с месяцами для каждого столбца даты через dt.month или dt.strftime(‘%B’). Затем используйте логическое сравнение: df[‘месяц_дата1’] == df[‘месяц_дата2’]. Для анализа зависимости между месяцами разных столбцов применяют groupby([‘месяц_дата1’, ‘месяц_дата2’]), что позволяет подсчитать количество совпадений или изучить сезонные различия.

Ссылка на основную публикацию