返回

如何用 Pandas DataFrame 根据日期范围筛选行?

python

Pandas DataFrame 中根据日期范围筛选行

前言

在数据分析中,经常需要根据特定条件从大型数据集(如 CSV 文件)中提取特定行或子集。其中,日期范围筛选是一种常见操作,它允许用户选择介于指定日期之间的行。本文将深入探讨如何使用 Pandas DataFrame 的 query() 方法来实现这一目标,并提供清晰易懂的示例。

Pandas 的 query() 方法

query() 方法是一种强大的工具,用于基于布尔表达式过滤 DataFrame。通过使用 Pandas 的灵活索引功能,query() 可以方便地根据日期条件选择行。

步骤:根据日期范围选择行

  1. 导入 Pandas 库:
    import pandas as pd

  2. 从 CSV 文件中创建 DataFrame:
    stock = pd.read_csv('stock_data.csv')

  3. 使用 query() 方法选择行:

    • 指定日期范围:
      filtered_stock = stock.query("start_date <= date <= end_date")
    • 使用 DatetimeIndex:
      date_range = pd.date_range('2023-01-01', '2023-03-31')
      filtered_stock = stock.query("date in @date_range")

示例:

假设 DataFrame 中有一列名为 "date",其中包含日期值:

import pandas as pd

stock = pd.read_csv('stock_data.csv')

start_date = pd.to_datetime('2023-01-01')
end_date = pd.to_datetime('2023-03-31')

filtered_stock = stock.query("start_date <= date <= end_date")

此代码将创建一个名为 filtered_stock 的新 DataFrame,其中包含介于 start_dateend_date 之间的行。

结论

使用 Pandas 的 query() 方法,根据日期范围筛选 DataFrame 行是一项简单而有效的操作。通过遵循本文中概述的步骤,用户可以轻松地提取特定时间段内的相关数据,从而简化数据分析流程。

常见问题解答

  1. 如何处理非日期时间格式的日期值?
    使用 pd.to_datetime() 函数将非日期时间格式的日期值转换为 Pandas 日期时间格式。

  2. 如果 DataFrame 中有多个日期列,如何选择特定列?
    query() 表达式中指定列名,例如 stock.query("start_date <= date <= end_date", engine='python')

  3. 是否可以使用其他运算符来比较日期?
    是的,可以,例如 ><!=

  4. 如何筛选包含特定日期或时间的行?
    使用 date == '2023-01-01'date.dt.hour == 15 等表达式。

  5. 如何根据多个日期条件筛选行?
    使用 &| 运算符组合多个条件,例如 stock.query("start_date <= date <= end_date & price > 100")