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

pandas调用to_datetime转换日期列报ValueError,单独测试却正常

报错原因及解决方案

核心原因

  • 你指定了固定的时间格式%Y-%m-%d %H:%M:%S.%f,但DataFrame的datecreated列中存在部分不符合该格式的字符串,导致整体转换失败。单独测试报错信息里的单条数据正常,不代表整列所有数据都符合格式要求。
  • 从报错提示中的time data "2021-09-16 16:32:11.643333"可以看到,你的时间字符串外层包裹了多余的双引号,你单独测试时大概率没有携带这层引号,因此单条测试可以通过,整列转换失败。
  • 其他可能的异常情况包括:部分时间字符串没有微秒部分、存在前后空白字符/不可见特殊字符、少数行是完全不符合时间格式的异常值。

解决步骤

第一步:定位异常数据

先执行以下代码找出所有转换失败的行,确认异常数据的具体格式:

# 临时转换,标记错误位置
temp_series = pd.to_datetime(df['datecreated'], format='%Y-%m-%d %H:%M:%S.%f', errors='coerce')
# 输出前20条转换失败的原始数据
print(df[temp_series.isna()]['datecreated'].head(20))

第二步:针对性修复

根据排查到的异常情况选择对应解决方案:

  • 如果是字符串携带多余引号/空白字符:先做字符串清理再转换
# 移除字符串外层的双引号、前后空白字符
df['datecreated'] = df['datecreated'].str.strip('" ')
# 执行转换
df['datecreated']= pd.to_datetime(df['datecreated'], format='%Y-%m-%d %H:%M:%S.%f')
  • 如果是部分数据没有微秒部分,格式不统一:可以让pandas自动推断格式,不需要强制指定固定format
# 开启自动推断格式,转换效率优于完全不指定参数
df['datecreated']= pd.to_datetime(df['datecreated'], infer_datetime_format=True)
  • 如果存在多种时间格式混合:分批次转换填充
# 先转换带微秒的格式,错误值转为NaT
df['datecreated'] = pd.to_datetime(df['datecreated'], format='%Y-%m-%d %H:%M:%S.%f', errors='coerce')
# 再转换不带微秒的格式,填充之前的NaT
df['datecreated'] = df['datecreated'].fillna(pd.to_datetime(df['datecreated'], format='%Y-%m-%d %H:%M:%S', errors='coerce'))
# 如有其他格式可以继续补充fillna逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:36:03