You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas Query无法处理日期值,如何合并为单条查询语句?

问题描述

从CSV文件读取数据,其中Time列格式为'22-02-21',执行以下代码处理日期:

df = pd.read_csv('input.csv',parse_dates=['Time'])
    
df['Time'] = pd.to_datetime(df['Time'], format='%Y-%m-%d')

Time列显示为非空的datetime64[ns]类型。分开两次查询可得到有效结果:

df2 = df.query('Column1 =="value" & Column2 =="abc" & `C Type`=="type" ')
filtered=df2.query("Time =='2023-01-02'")

但将所有条件合并到单条Query语句时,结果总和为0:

df2 = df.query((f'column1=="value" & Column2 =="abc" & `C Type`=="type" & Time =="2022-01-26"'))
print (" Test ********** Sum:",sum(df2['Measure'])) 
# 输出 Sum:0

问题原因

  1. 引号转义与字符串构造错误:合并查询时使用了HTML转义符",同时嵌套f-string的方式导致传递给query的条件字符串格式异常,Time的匹配条件未被正确解析。
  2. Datetime与字符串的匹配逻辑差异:单独查询时,pandas可能会自动将字符串日期转换为datetime类型匹配,但合并查询时,复杂表达式的解析逻辑可能导致字符串无法正确转换,进而匹配失败。
  3. 日期转换的潜在格式冲突:原始日期是2位年份格式'22-02-21',但转换时使用了4位年份的格式%Y-%m-%d,可能导致解析后的日期与预期不符(比如将22识别为2022年,而非1922年),虽然单独查询能命中,但合并时可能因隐藏的格式问题导致匹配失效。

解决方法

方法1:修正Query字符串的引号格式

直接使用单双引号嵌套构造查询条件,避免转义符和错误的f-string嵌套:

# 直接构造查询字符串,内部用双引号,外部用单引号
df2 = df.query('Column1 == "value" & Column2 == "abc" & `C Type` == "type" & Time == "2022-01-26"')
print("Test ********** Sum:", df2['Measure'].sum())

或者用f-string时,内部使用单引号:

target_date = "2022-01-26"
df2 = df.query(f'Column1 == "value" & Column2 == "abc" & `C Type` == "type" & Time == \'{target_date}\'')
print("Test ********** Sum:", df2['Measure'].sum())

方法2:引用外部Datetime对象确保类型匹配

通过@符号在query中引用外部的pd.Timestamp对象,彻底避免类型转换问题:

target_time = pd.Timestamp("2022-01-26")
df2 = df.query('Column1 == "value" & Column2 == "abc" & `C Type` == "type" & Time == @target_time')
print("Test ********** Sum:", df2['Measure'].sum())

方法3:修正日期转换逻辑

针对原始日期的2位年份格式,使用%y-%m-%d格式解析,确保日期转换完全符合预期:

# 方式1:读取时直接指定日期格式
df = pd.read_csv('input.csv', parse_dates=['Time'], date_format='%y-%m-%d')

# 方式2:读取后再转换
df = pd.read_csv('input.csv')
df['Time'] = pd.to_datetime(df['Time'], format='%y-%m-%d')

内容的提问来源于stack exchange,提问作者v s

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 07:25:25