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

处理大写月份缩写的日期转datetime失败问题(160万行数据)

解决大写月份缩写的日期列转换问题(附大日期集处理技巧)

我之前处理大样本数据时也碰到过这种「大写月份缩写导致datetime转换失败」的问题,结合你160万行数据的场景,给你几个实用的解决方案:

第一步:先明确日期列的格式

首先先打印日期列的前几行,确认具体格式(比如是DD-MMM-YYYY、MMM DD, YYYY还是其他):

print(test['date'].head())

方法1:指定精准的格式字符串(效率最高,优先推荐)

pandas的pd.to_datetime里的%b格式符可以匹配月份缩写,而且不区分大小写,只要你指定的格式和实际字符串匹配就行。比如如果你的日期是01-JAN-2023这种日-月缩写-年的格式,直接用:

# 转换日期列,errors='coerce'把转换失败的行转为NaT方便后续排查
test['date'] = pd.to_datetime(test['date'], format='%d-%b-%Y', errors='coerce')

如果是JAN 01, 2023这种格式,就把format改成%b %d, %Y。

方法2:先标准化字符串大小写(适配格式不统一的情况)

如果你的日期列里混合了大小写月份(比如既有JAN又有jan),可以先统一字符串格式再转换:

# 转成首字母大写的标准格式,再转换datetime
test['date'] = pd.to_datetime(test['date'].str.title(), format='%d-%b-%Y', errors='coerce')
# 或者全部转小写
# test['date'] = pd.to_datetime(test['date'].str.lower(), format='%d-%b-%Y', errors='coerce')

方法3:自动推断格式(适合不确定格式的场景)

如果实在搞不清具体格式,可以用infer_datetime_format=True让pandas自动推断,虽然效率比指定格式低一点,但160万行数据完全能处理:

test['date'] = pd.to_datetime(test['date'], infer_datetime_format=True, errors='coerce')

后续:计算日期差值

转换成功后,如果你需要结合日期和时间列计算完整时间差,可以先合并成完整的datetime:

# 合并日期和时间列
test['full_datetime'] = pd.to_datetime(test['date'].astype(str) + ' ' + test['time'].astype(str))
# 计算两个datetime列的差值(比如和另一列target_datetime)
test['time_diff'] = test['full_datetime'] - test['target_datetime']
# 如果只需要天数差,提取.dt.days
test['day_diff'] = (test['full_datetime'] - test['target_datetime']).dt.days

小提示:排查转换失败的行

用errors='coerce'后,转换失败的行会变成NaT,可以用下面的代码找到这些脏数据:

# 查看转换失败的行
print(test[test['date'].isna()])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:27:09