如何从Pandas DataFrame中筛选指定日期的行?以筛选2019年8月4日数据为例
解决方法:筛选DataFrame中指定日期的行
你的代码有两个关键问题导致无法运行:
- 缺少
.dt访问器:对于Pandas的datetime64类型列,需要通过.dt访问器来获取年、月、日属性(直接访问.year只适用于单个datetime对象,而不是Series)。 - 逻辑运算符优先级问题:
&的优先级高于==,所以需要给每个条件表达式单独加括号,否则Python会错误地计算运算顺序。
正确的写法
import pandas as pd # 假设all_data已经是加载好的DataFrame,且'Order Date'是datetime类型 aug4 = all_data.loc[ (all_data['Order Date'].dt.year == 2019) & (all_data['Order Date'].dt.month == 8) & (all_data['Order Date'].dt.day == 4) ]
更简洁的替代方案
如果你想简化代码,可以直接将Order Date转换为date类型后进行匹配,这样代码更易读:
target_date = pd.to_datetime('2019-08-04').date() aug4 = all_data[all_data['Order Date'].dt.date == target_date]
另外,如果你的Order Date包含具体时间(比如2019-08-04 14:30:00),还可以用区间筛选的方式,确保所有当天的记录都被包含:
start = pd.to_datetime('2019-08-04') end = start + pd.Timedelta(days=1) aug4 = all_data[all_data['Order Date'].between(start, end, inclusive='left')]
这种方式会包含2019-08-04 00:00:00到2019-08-04 23:59:59之间的所有行。
内容的提问来源于stack exchange,提问作者Vayun Ekbote
相关产品推荐
相关产品推荐

