如何筛选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
相关产品推荐
相关产品推荐

