Фильтрация DataFrame Pandas по датам на два месяца вперёд

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для фильтрации данных в DataFrame Pandas по датам, сначала следует преобразовать колонку с датами в формат datetime, воспользовавшись функцией pd.to_datetime(). Затем можно применять булевы маски для отбора необходимых дат или временных промежутков.

Python
Скопировать код
import pandas as pd

# Преобразуем столбец дат в формат datetime.
df['date_column'] = pd.to_datetime(df['date_column'])

# Фильтруем данные за конкретную дату.
filtered_df = df[df['date_column'] == '2023-01-01']

# Выбираем данные за определенный временной интервал.
filtered_df = df[df['date_column'].between('2023-01-01', '2023-01-31')]

Код можно адаптировать под свои задачи, установив в нем другие даты.

Кинга Идем в IT: пошаговый план для смены профессии

Детальная фильтрация и тонкости процесса

Високосные годы и последние дни месяцев: дьявол, скрывающийся в мелочах

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

Python
Скопировать код
start_date = '2023-01-30'  # Обычная дата
end_date = pd.Timestamp(start_date) + pd.offsets.MonthEnd(2)  # Добавляем два месяца с учетом особенностей

# Фильтруем данные между начальной и конечной датой.
filtered_df = df[(df['date_column'] >= start_date) & (df['date_column'] <= end_date)]

Продвинутые методы фильтрации

Можно воспользоваться атрибутами .dt для выделения и фильтрации по отдельным компонентам даты, т.е., по месяцу или дню недели:

Python
Скопировать код
# Фильтруем все данные, относящиеся к марту.
filtered_df = df[df['date_column'].dt.month == 3]

# Выбираем данные, у которых соответствующий день недели – понедельник.
monday_df = df[df['date_column'].dt.weekday == 0]

Замена .ix на .loc и .iloc

Метод .ix признан устаревшим. Вместо него для индексации по меткам и по позициям необходимо использовать методы .loc и .iloc соответственно.

Сложная фильтрация

Операторы & (И), | (ИЛИ) и метод df.query позволяют создавать сложные булевы маски:

Python
Скопировать код
# Пример фильтрации с применением сложного условия.
filtered_df = df[(df['date_column'] >= pd.to_datetime('2023-01-01')) & 
                 (df['date_column'] <= pd.to_datetime('2023-03-31'))]

Производительность

  • Преобразуйте столбцы дат в тип datetime64[ns] для увеличения скорости операций.
  • При работе с большим объемом данных используйте столбец дат в качестве индекса для повышения эффективности поиска.

Визуализация

DataFrame можно представить в виде календаря с событиями, распределенными по датам. Фильтрация по датам помогает выделить определенные события.

Решаем сложные задачи

Часовые пояса

Часовой пояс может повлиять на результаты сравнения дат. Используйте объекты, осведомленные о часовом поясе:

Python
Скопировать код
# Фильтрация с учетом часовых поясов.
tz_filtered_df = df[df['date_column'].dt.tz_localize('UTC') == pd.to_datetime('2023-03-01', utc=True)]

Переход на летнее время

Будьте внимательны при работе с данными в периоды перехода на летнее время.

Високосные секунды

Тип datetime64[ns] в Pandas не обрабатывает високосные секунды, но это не должно влиять на большинство операций фильтрации.

Скользящее окно

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

Python
Скопировать код
today = pd.Timestamp('сегодня')
start = today – pd.offsets.MonthBegin(2)
end = today

# Фильтр для скользящего временного окна.
moving_window_df = df[(df['date_column'] >= start) & (df['date_column'] <= end)]

Полезные материалы

В данном разделе представлены источники, которые помогут более глубоко осмыслить работу с временными рядами и фильтрацией в Pandas.