Python datetime与DataFrame object类型日期匹配失效问题
出错原因
代码始终返回FAIL是两类问题叠加导致的,你猜测的类型差异只是潜在风险,并非当前故障的核心原因:
- 核心逻辑错误:
actual_dates["contact_date"].any()的返回值是布尔类型(True/False)。Series.any()的作用是判断序列中是否存在至少一个真值,不会返回序列里存储的实际日期值。你拿布尔值和datetime.date类型的correct_date做不等判断,结果永远为真,自然始终打印FAIL。 - 笔误风险:你SQL中给日期列定义的别名是大写
CONTACT_DATE,判断代码里写的是小写contact_date,默认配置下这行代码会直接触发KeyError,如果你的环境没有抛错,大概率是数据库连接配置自动做了列名小写转换。 - 潜在类型兼容问题:你的猜测部分成立:不同数据库驱动读取DATE类型字段返回给pandas时,值的类型可能是字符串、
numpy.datetime64,和Python原生datetime.date直接比较时,确实可能出现值相同但判定不等的情况,但这不是你当前代码失效的主要原因。
修正方案
按如下逻辑调整代码即可实现预期的校验效果:
- 先校验SQL返回的记录数,确认是否符合「仅1个日期值」的前提
- 提取列中的唯一日期值,统一做类型转换,消除跨类型比较的误差
- 对齐类型后再做等值判断
参考实现代码:
# 先校验返回结果数量是否符合预期 if len(actual_dates) != 1: print("FAIL") else: # 注意列名和SQL别名保持一致,若你的环境自动转小写就替换为"contact_date" # 统一转换为datetime后取原生date类型,和correct_date类型对齐 actual_date = pd.to_datetime(actual_dates["CONTACT_DATE"]).iloc[0].date() print("SUCCESS" if actual_date == correct_date else "FAIL")
内容的提问来源于stack exchange,提问作者SRJCoding
相关产品推荐
相关产品推荐

