首页 > 后端开发 > Python教程 > 如何按日期范围有效过滤 DataFrame 行?

如何按日期范围有效过滤 DataFrame 行?

Barbara Streisand
发布: 2024-12-12 16:30:11
原创
926 人浏览过

How to Efficiently Filter DataFrame Rows by Date Range?

查询指定日期范围内的 DataFrame 行

此问题解决了从包含以下内容的 DataFrame 中提取特定日期范围内的行的挑战:日期栏。提供的解决方案提供了两种实现此目的的方法。

方法 1:使用布尔掩码

要采用此方法,请确保 DataFrame 中的“日期”代表一个数据类型为 datetime64[ns] 的系列。采用以下步骤:

  1. 创建布尔掩码:指定 start_date 和 end_date 参数,可以是 datetime.datetimes、np.datetime64s、pd.Timestamps 或 datetime 字符串。构造一个布尔掩码,对于满足日期范围条件的行,其计算结果为 True。
  2. 选择子数据帧: 使用 df.loc[mask] 提取通过掩码条件的行。或者,要覆盖现有的 DataFrame,请将掩码应用为 df = df.loc[mask].

方法 2:分配 DatetimeIndex

最优涉及频繁选择日期的场景,此方法涉及将日期列设置为index:

  1. 设置 DatetimeIndex: 使用 df.set_index(['date']) 将日期列转换为 DatetimeIndex。
  2. 选择行按日期: 利用 df.loc[start_date:end_date] 根据日期范围过滤行。请注意,此选择中包含 start_date 和 end_date。

示例:

利用响应中提供的代码,请考虑以下插图:

import pandas as pd

df = pd.DataFrame({'date': pd.date_range('2023-03-01', periods=10)})
df['value'] = np.random.randn(10)

# Boolean Mask Approach
start_date = '2023-03-03'
end_date = '2023-03-08'
mask = (df['date'] > start_date) & (df['date'] <= end_date)
df_subset = df.loc[mask]

# DatetimeIndex Approach
df = df.set_index('date')
df_subset = df.loc[start_date:end_date]
登录后复制

这将产生两个 DataFrame,其中包含与指定日期对应的行范围。

以上是如何按日期范围有效过滤 DataFrame 行?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板