运行Python代码时遇TypeError:datetime.date与str无法比较
解决TypeError: '<' not supported between instances of 'datetime.date' and 'str'
嗨,这个错误我太熟了!本质就是你在代码里把**datetime.date对象和字符串类型的日期**直接用</>这类比较符碰在一起了——Python可接受不了不同类型的对象这么比哦。
结合你贴的雅虎财经爬取代码,大概率是在处理返回的历史股价数据时,对日期字段的类型没统一好。我给你分情况说修复方法:
先搞清楚数据里的日期格式
雅虎财经返回的HistoricalPriceStore里的date字段一般是Unix时间戳(数字),但也可能你后续处理把它转成了字符串。先打印几条quotes里的数据确认下:
print(quotes[:2]) # 看看date字段是数字还是字符串
情况1:日期是Unix时间戳(数字)
把时间戳转成datetime.date对象,再和你的目标日期比较:
from datetime import datetime, date # 假设你要筛选2023年1月1日之前的数据 target_date = date(2023, 1, 1) for price_item in quotes: # 把Unix时间戳转成date对象 item_date = datetime.fromtimestamp(price_item['date']).date() if item_date < target_date: # 你的业务逻辑,比如添加到筛选后的列表里 ...
情况2:日期是字符串(比如"2024-05-20")
把字符串转成datetime.date对象再比较:
from datetime import datetime, date target_date = date(2023, 1, 1) for price_item in quotes: # 注意这里的格式要和你拿到的日期字符串完全匹配,比如"%Y-%m-%d"对应"年-月-日" item_date = datetime.strptime(price_item['date'], "%Y-%m-%d").date() if item_date < target_date: ...
用Pandas处理更高效
既然你导入了pandas,可以直接批量转换日期类型,避免循环里的麻烦:
import pandas as pd from datetime import date df = pd.DataFrame(quotes) # 如果是时间戳转date df['date'] = pd.to_datetime(df['date'], unit='s').dt.date # 如果是字符串转date df['date'] = pd.to_datetime(df['date']).dt.date # 筛选的时候就不会报错了 filtered_df = df[df['date'] < date(2023, 1, 1)]
最后再啰嗦一句:以后做日期比较,一定要保证两边是相同类型——要么都是datetime.date对象,要么都是格式完全一致的字符串,就不会再踩这个坑啦!
内容的提问来源于stack exchange,提问作者Xiaowu Zhao
相关产品推荐
相关产品推荐

