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

Pandas将yyyy-MM-ddTHH:mm:ss.SSSZ格式列转为datetime报错排查

解决pd.to_datetime转换含非时间值列的报错问题

你的报错核心原因是last_update_date_time列中存在不符合指定格式的字符串——第0行的token_last_update_date_time,而当你指定format参数时,pandas会严格校验每一行的格式匹配性,只要有一行不匹配就直接抛出ValueError,不会自动转为NaT。

以下是几种可行的解决办法:

  • 强制转换不匹配值为NaT(推荐)
    在pd.to_datetime中添加errors='coerce'参数,让不符合格式的字符串自动转为NaT,其他符合格式的正常转换,不会中断流程:

    df["updatedTimeDateTime"] = pd.to_datetime(df["last_update_date_time"], format='%Y-%m-%dT%H:%M:%S.%fZ', errors='coerce')
    
  • 先筛选有效行再转换
    用正则表达式匹配符合目标时间格式的行,仅对这些行执行转换,剩余行手动设为NaT:

    # 匹配yyyy-MM-ddTHH:mm:ss.SSSZ格式的正则
    valid_time_mask = df["last_update_date_time"].str.match(r'^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$')
    # 初始化新列为NaT
    df["updatedTimeDateTime"] = pd.NaT
    # 对有效行执行转换
    df.loc[valid_time_mask, "updatedTimeDateTime"] = pd.to_datetime(df.loc[valid_time_mask, "last_update_date_time"], format='%Y-%m-%dT%H:%M:%S.%fZ')
    
  • 移除无效的表头行(若为误混入)
    如果第0行的token_last_update_date_time是误导入的表头而非有效数据,可以直接删除该行后再转换:

    # 删除第0行并重置索引
    df = df.drop(index=0).reset_index(drop=True)
    # 执行转换
    df["updatedTimeDateTime"] = pd.to_datetime(df["last_update_date_time"], format='%Y-%m-%dT%H:%M:%S.%fZ')
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 14:21:03