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

pd.to_datetime转换有效格式时间列返回NaT,求排查原因

解决pd.to_datetime解析时间字符串返回全NaT的问题

问题原因

你的时间字符串格式为11/05/2022 07:33:57:851 PM,其中秒与毫秒之间用冒号(:)分隔,但你使用的format参数"%m/%d/%Y %I:%M:%S:%f %p"中,%f(用于匹配微秒/毫秒的占位符)在pandas的解析逻辑里,默认期望是点(.)分隔的小数部分,这导致解析器无法匹配格式,最终返回全量NaT。

解决方案

方案1:替换分隔符后指定格式解析

先将时间字符串中秒与毫秒之间的冒号替换为点,再用指定格式解析,既保证效率又确保准确性:

# 精准替换秒后的冒号为点
temp_series['Timestamp[ms]'] = temp_series['Timestamp[ms]'].str.replace(r'(\d{2}):(\d{3})', r'\1.\2', regex=True)
# 解析为datetime对象
temp_series['Timestamp[ms]'] = pd.to_datetime(temp_series['Timestamp[ms]'], format="%m/%d/%Y %I:%M:%S.%f %p")

正则表达式r'(\d{2}):(\d{3})'会匹配秒(两位数字)后的冒号和毫秒(三位数字),替换为\1.\2即秒.毫秒的标准格式。

方案2:让pandas自动推断格式

如果数据量较小(你的数据集仅3248行),可以省略format参数,让pandas自动识别时间格式,写法更简洁:

temp_series['Timestamp[ms]'] = pd.to_datetime(temp_series['Timestamp[ms]'], errors='coerce')

注意:自动推断的速度比指定格式慢,适合小数据集场景。

验证结果

执行上述任意方案后,通过temp_series['Timestamp[ms]'].dtype查看列类型,会显示datetime64[ns],且不会出现NaT值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:10:24