如何在Pandas中筛选包含2022-02月份的DataFrame行
Pandas筛选包含2022年2月日期的DataFrame行
需求:从给定的日期DataFrame中筛选出所有包含2022-02月份日期的行(包括March行中含有该月份日期的记录)。
尝试过的错误方法
calendar.loc[(calendar >= '2022-02-01') & (calendar < '2020-03-01')]
calendar[calendar == '2022-02-01']
原始DataFrame数据
Sunday Monday Tuesday Wednesday Thursday Friday Saturday January 2021-12-26 2021-12-27 2021-12-28 2021-12-29 2021-12-30 2021-12-31 2022-01-01 January 2022-01-02 2022-01-03 2022-01-04 2022-01-05 2022-01-06 2022-01-07 2022-01-08 January 2022-01-09 2022-01-10 2022-01-11 2022-01-12 2022-01-13 2022-01-14 2022-01-15 January 2022-01-16 2022-01-17 2022-01-18 2022-01-19 2022-01-20 2022-01-21 2022-01-22 January 2022-01-23 2022-01-24 2022-01-25 2022-01-26 2022-01-27 2022-01-28 2022-01-29 February 2022-01-30 2022-01-31 2022-02-01 2022-02-02 2022-02-03 2022-02-04 2022-02-05 February 2022-02-06 2022-02-07 2022-02-08 2022-02-09 2022-02-10 2022-02-11 2022-02-12 February 2022-02-13 2022-02-14 2022-02-15 2022-02-16 2022-02-17 2022-02-18 2022-02-19 February 2022-02-20 2022-02-21 2022-02-22 2022-02-23 2022-02-24 2022-02-25 2022-02-26 March 2022-02-27 2022-02-28 2022-03-01 2022-03-02 2022-03-03 2022-03-04 2022-03-05 March 2022-03-06 2022-03-07 2022-03-08 2022-03-09 2022-03-10 2022-03-11 2022-03-12 March 2022-03-13 2022-03-14 2022-03-15 2022-03-16 2022-03-17 2022-03-18 2022-03-19 March 2022-03-20 2022-03-21 2022-03-22 2022-03-23 2022-03-24 2022-03-25 2022-03-26 April 2022-03-27 2022-03-28 2022-03-29 2022-03-30 2022-03-31 2022-04-01 2022-04-02 April 2022-04-03 2022-04-04 2022-04-05 2022-04-06 2022-04-07 2022-04-08 2022-04-09 ....
期望筛选结果
Sunday Monday Tuesday Wednesday Thursday Friday Saturday February 2022-01-30 2022-01-31 2022-02-01 2022-02-02 2022-02-03 2022-02-04 2022-02-05 February 2022-02-06 2022-02-07 2022-02-08 2022-02-09 2022-02-10 2022-02-11 2022-02-12 February 2022-02-13 2022-02-14 2022-02-15 2022-02-16 2022-02-17 2022-02-18 2022-02-19 February 2022-02-20 2022-02-21 2022-02-22 2022-02-23 2022-02-24 2022-02-25 2022-02-26 March 2022-02-27 2022-02-28 2022-03-01 2022-03-02 2022-03-03 2022-03-04 2022-03-05
错误原因分析
- 第一种方法存在两个问题:
- 日期范围写错,
2020-03-01应为2022-03-01; - 直接对整个DataFrame做比较会得到布尔矩阵,未通过
any(axis=1)判断每行是否存在符合条件的元素,无法正确筛选目标行。
- 日期范围写错,
- 第二种方法仅筛选完全等于
2022-02-01的行,范围过窄,不符合“包含任意2022年2月日期”的需求。
正确解决方法
步骤1:转换日期列为datetime类型
若DataFrame中的日期是字符串格式,先转换为datetime类型以支持日期操作:
import pandas as pd calendar = calendar.apply(pd.to_datetime)
步骤2:筛选包含2022年2月日期的行
有两种常用实现方式:
方式一:通过日期的年、月属性判断
# 检查每行是否存在2022年2月的日期 mask = calendar.apply(lambda row: (row.dt.year == 2022) & (row.dt.month == 2)).any(axis=1) # 应用筛选条件 result = calendar[mask]
方式二:通过日期范围判断
start_date = pd.to_datetime('2022-02-01') end_date = pd.to_datetime('2022-02-28') # 检查每行是否存在处于该范围内的日期 mask = calendar.apply(lambda row: row.between(start_date, end_date)).any(axis=1) # 应用筛选条件 result = calendar[mask]
运行上述代码后,即可得到符合需求的筛选结果。
内容的提问来源于stack exchange,提问作者Henul
相关产品推荐
相关产品推荐

