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

为何Pandas to_datetime对一种格式保留纳秒,另一种格式报错?

带纳秒时间戳转换报错原因解析

问题场景

通过pandas.to_datetime转换带纳秒的时间戳时,标准格式的字符串可以正常解析,但自定义分隔符的格式会报错:

正常运行的代码:

import pandas as pd
print(pd.to_datetime('2023-01-02 03:04:05.012345678', format='%Y-%m-%d %H:%M:%S.%f'))
# 输出:2023-01-02 03:04:05.012345678

报错代码:

import pandas as pd
print(pd.to_datetime('2023.01.02D03:04:05.012345678', format='%Y.%m.%dD%H:%M:%S.%f'))
# 报错:ValueError: unconverted data remains: 678

环境:Python v3.9.0、Pandas v1.5.0

报错原因

核心原因是Pandas 1.5.0版本中,%f格式符仅支持解析最多6位的微秒数,而你的时间字符串包含9位纳秒(012345678),两种场景的解析逻辑存在差异:

  • 对于标准的"日期+空格+时间"格式,Pandas做了兼容处理,会自动识别并保留超过6位的纳秒部分,不会严格限制%f的6位解析上限;
  • 但使用自定义分隔符D时,Pandas会严格按照你指定的format字符串解析,%f仅匹配前6位小数,剩下的678没有对应格式符可以匹配,因此触发"未转换数据剩余"的报错。

解决办法

  • 升级Pandas到1.6.0及以上版本:新版本的%f支持解析最多9位纳秒数,可直接处理该自定义格式;
  • 手动截断小数部分:将字符串中的小数部分保留前6位后再进行解析;
  • 使用dateutil.parser.parse:该工具支持自动识别更多时间格式,无需指定format(需先安装python-dateutil库)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:30:45