如何按Data列的日期条件筛选DataFrame行?
如何按Data列的日期条件筛选DataFrame行?
嘿,别放弃呀!你的问题其实只是个语法小失误导致的,很容易解决~
首先得纠正你之前的错误写法:df['Data' == '2023-07-11']这个逻辑搞反了——你应该先选中Data列,再对列内的每个值做等于判断,而不是把列名和日期直接做比较。
正确的筛选方法
结合你提供的示例代码,这里有两种简单好用的正确写法:
方法1:基础布尔索引
这是最直接的方式,先获取Data列,生成一个布尔数组(标记每行是否符合日期条件),再用这个数组去筛选行:
target_date = '2023-07-11' filtered_df = orig_df_stats[orig_df_stats['Data'] == target_date] print(filtered_df)
运行后会得到你想要的结果:
Data Val1 Val2 Val3 P Totals 0 2023-07-11 2 23 2 0 12
方法2:使用query()方法(更简洁)
如果你喜欢类SQL的直观语法,可以用query()函数,写法更清爽:
filtered_df = orig_df_stats.query("Data == '2023-07-11'") print(filtered_df)
这个方法和上面的效果完全一致,只是表达形式不同。
额外建议:把日期列转成datetime类型
虽然现在用字符串匹配已经能生效,但如果之后你需要做日期相关的进阶操作(比如按月份筛选、计算日期差),建议把Data列转换成datetime类型,后续处理会更灵活:
orig_df_stats['Data'] = pd.to_datetime(orig_df_stats['Data'])
转成datetime后,筛选语法依旧适用,甚至可以直接用日期对象来匹配:
from datetime import date target_date = date(2023,7,11) filtered_df = orig_df_stats[orig_df_stats['Data'] == target_date]
为什么你之前的写法会出错?
你写的orig_df_stats['Data' == '2023-07-11'],其实是先计算'Data' == '2023-07-11',这个表达式的结果是False,然后你相当于在取orig_df_stats[False],这当然会报错或者得到空结果啦。
备注:内容来源于stack exchange,提问作者Booji Boy
相关产品推荐
相关产品推荐

