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

Python转换DD-MMM-YYYY格式字符串为datetime及Pandas时间列转换报错求助

问题2:修复Pandas DataFrame中时间字符串转datetime的"unknown string value"错误

先给你揪出问题根源:看你的示例数据里有个无效的时间条目——01-May-2012 14:64:45.119。分钟的取值范围是0-59,64明显不符合规范,这才是pandas.to_datetime()报错的真正原因,不是格式不被识别。

下面一步步解决:

1. 先定位无效的时间条目

先找出那些分钟超出范围的行,明确问题所在:

import pandas as pd

# 构造你的示例DataFrame
df = pd.DataFrame({
    'date time': [
        '01-May-2012 16:44:55.113',
        '01-Jun-2012 18:49:57.466',
        '01-May-2012 14:64:45.119',
        '01-May-2012 14:23:55.113'
    ]
})

# 提取分钟部分并筛选出大于59的行
invalid_rows = df[df['date time'].str.extract(r':(\d{2}):', expand=False).astype(int) > 59]
print("无效的时间条目:")
print(invalid_rows)

2. 修复无效值或优雅处理

你有两种选择:

选项A:手动修正无效值

如果64分钟是输入错误(比如应该是04分钟,对应时间15:04:45),可以直接替换:

# 根据实际业务逻辑替换无效的分钟值
df['date time'] = df['date time'].str.replace('14:64:', '15:04:', regex=True)

# 现在用指定格式转换,比自动推断更高效准确
df['datetime'] = pd.to_datetime(df['date time'], format='%d-%b-%Y %H:%M:%S.%f')
print(df['datetime'])

选项B:将无效值转为NaT(非时间值)

如果不想手动修正,可以用errors='coerce'把无效值转为NaT,后续再处理(比如删除或填充):

df['datetime'] = pd.to_datetime(df['date time'], format='%d-%b-%Y %H:%M:%S.%f', errors='coerce')
print(df['datetime'])

为什么拆分字符串也没用

当你拆分字符串只转日期部分时,要么拆分方法没处理好无效的时间组件,要么日期部分的格式指定有误,但核心问题始终是那个无效的分钟值——先解决它,转换就会顺畅很多。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:44:25