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

如何筛选Pandas DataFrame中日期大于5年前1月1日的行?解决类型错误

问题解决:datetime.datetime与datetime.date无法比较的错误

错误原因:
你的DataFrame中Date列的数据类型是datetime.datetime(包含时分秒),而你定义的seasStart是datetime.date类型(仅日期),Python不允许直接比较这两种不同的时间类型,因此触发TypeError。

另外你的代码里还有一处小问题:today = date.today()中的date未明确导入,需要改为datetime.date.today(),或者在开头添加from datetime import date。


解决方案(三种可选):

方案1:将seasStart转为datetime.datetime类型

直接用datetime.datetime创建包含时分秒的时间对象,和DataFrame里的时间类型匹配:

# 修正today的定义
today = datetime.date.today()
# 创建datetime类型的5年前1月1日
seasStart = datetime.datetime(today.year - 5, 1, 1)
# 筛选
dfSeas = df[(df['Date'] > seasStart)]

方案2:提取DataFrame中Date列的date部分进行比较

保留seasStart为date类型,筛选时用dt.date提取日期:

today = datetime.date.today()
seasStart = datetime.date(today.year -5, 1, 1)
# 提取Date列的date部分再比较
dfSeas = df[(df['Date'].dt.date > seasStart)]

方案3:使用Pandas原生Timestamp(推荐)

Pandas的pd.Timestamp和DataFrame的datetime64类型兼容性更好,避免混用datetime模块:

today = pd.Timestamp.today()
seasStart = pd.Timestamp(today.year -5, 1, 1)
dfSeas = df[(df['Date'] > seasStart)]

额外建议:读取Excel后,最好用pd.to_datetime()确保Date列是标准时间类型:

df['Date'] = pd.to_datetime(df['Date'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:38:17