Pandas中Timestamp与datetime.date类型日期比较无法匹配问题
问题根因
pandas Timestamp 类型与 Python 原生 datetime.date 类型分属不同数据类,即使二者代表的日期数值一致,直接做比较运算也会因类型不匹配返回 False,这是你等值查询返回空 DataFrame 的核心原因。
可用解决方案
方案1:将shortdate列统一转为date类型筛选
适合无需关注时分秒、仅按日期维度筛选的场景:
import datetime from datetime import timedelta # 生成日期边界 todays_date = datetime.today().date() date_of_last_week = todays_date - timedelta(days=7) # 筛选一周内的记录 filtered_df = df[df['shortdate'].dt.date.between(date_of_last_week, todays_date)]
单条等值测试可按如下逻辑修改:
just_date = entry_1000.date() print(df.loc[df['shortdate'].dt.date == just_date])
方案2:将参考日期转为Timestamp类型筛选
无需修改原DataFrame的字段类型,运算效率更高:
import datetime from datetime import timedelta import pandas as pd # 生成Timestamp类型的日期边界 todays_date = pd.to_datetime(datetime.today().date()) date_of_last_week = todays_date - timedelta(days=7) # 直接筛选即可 filtered_df = df[df['shortdate'].between(date_of_last_week, todays_date)]
补充说明
如果shortdate列存储的时间包含非0点的时分秒数值,使用方案2时可将结束边界调整为 todays_date + timedelta(days=1),避免今日非0点的记录被排除。
内容的提问来源于stack exchange,提问作者kitchen800
相关产品推荐
相关产品推荐

