将date转为datetime后单条计算正常,用lambda批量处理报错求助
计算日期差时TypeError的解决办法
问题核心:你用pd.to_datetime(..., errors='ignore')转换日期时,只要有数据不符合指定的%Y-%d-%m %H:%M:%S格式,就会保留原字符串类型。你测试的单个索引刚好是转换成功的datetime对象,所以能正常算差值,但整个df['date']列里混着字符串和datetime类型,批量计算时就触发了类型不匹配的错误。
修复方案
方案一:强制转换错误数据为缺失值(推荐)
把errors='ignore'换成errors='coerce',转失败的日期会变成NaT(pandas的缺失时间类型),整个列就统一为datetime相关类型了。而且不用agg和lambda,直接用矢量运算更高效:
# 重新转换日期列 df['date'] = pd.to_datetime(df['date'], format='%Y-%d-%m %H:%M:%S', errors='coerce') # 直接计算时间差 df['Diff'] = pd.Timestamp.now().normalize() - df['date']
方案二:排查并修正错误数据
先找出列里没转成功的字符串数据,修正格式后再转换:
# 筛选出非datetime类型的行,查看错误数据 invalid_rows = df[~df['date'].apply(lambda x: isinstance(x, pd.Timestamp))] print(invalid_rows) # 修正错误数据后,去掉errors参数(默认errors='raise',有错误会直接报错提醒) df['date'] = pd.to_datetime(df['date'], format='%Y-%d-%m %H:%M:%S') # 计算时间差 df['Diff'] = pd.Timestamp.now().normalize() - df['date']
内容的提问来源于stack exchange,提问作者hamideh
相关产品推荐
相关产品推荐

