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

将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 05:18:21