Data Analysis

Мастерство фильтрации по датам в Pandas DataFrame

Spread the love

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

Оглавление

Фильтрация с помощью булевых масок

Булевы маски предлагают наиболее фундаментальный и гибкий подход. Они создают булевый массив (маску), который фильтрует строки на основе заданных условий. Этот метод очень хорошо подходит для сложных сценариев.


import pandas as pd

data = {'Date': pd.to_datetime(['2023-10-26', '2023-11-15', '2023-12-01', '2024-01-10', '2024-02-20']),
        'Value': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)

start_date = pd.to_datetime('2023-11-01')
end_date = pd.to_datetime('2024-01-01')

mask = (df['Date'] >= start_date) & (df['Date'] <= end_date)
filtered_df = df[mask]  #Более эффективно, чем df.loc[mask]
print(filtered_df)

Использование метода .query()

Метод .query() предоставляет более читаемую и компактную альтернативу для фильтрации. Он особенно полезен для сложных условий.


start_date = '2023-11-01'
end_date = '2024-01-01'

filtered_df = df.query('@start_date <= Date <= @end_date')
print(filtered_df)

Использование метода .isin()

Метод .isin() подходит, когда нужно выбрать строки на основе списка конкретных дат, а не непрерывного диапазона. Он менее эффективен для больших непрерывных диапазонов.


dates_to_include = pd.to_datetime(['2023-11-15', '2023-12-01'])
filtered_df = df[df['Date'].isin(dates_to_include)]
print(filtered_df)

Использование метода .between()

Метод .between() предлагает упрощенный подход для выбора строк в непрерывном диапазоне дат. Он эффективен и легко читается.


start_date = pd.to_datetime('2023-11-01')
end_date = pd.to_datetime('2024-01-01')

filtered_df = df[df['Date'].between(start_date, end_date, inclusive='both')] #аргумент inclusive добавлен для ясности
print(filtered_df)

В заключение, Pandas предлагает различные методы для фильтрации по датам. Оптимальный выбор зависит от ваших конкретных потребностей и стиля кодирования. Булевы маски обеспечивают максимальную гибкость, .query() повышает читаемость, а .between() упрощает выбор непрерывного диапазона. Помните, что для оптимальной производительности ваш столбец дат должен иметь тип datetime64.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *