Data Analysis

Pandas数据框日期筛选技巧

Spread the love

高效过滤Pandas DataFrame中的日期范围是数据分析中一项至关重要的技能。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

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注