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

使用pd.to_datetime转换日期列报错及混合YYYY/YY格式兼容方案咨询

报错原因
  • 列名混入数据行:报错信息显示待解析的字符串为Order Date,也就是你的列名被当成了第一条普通数据,完全不符合指定的时间格式,因此触发异常。该问题通常是读取数据时未正确设置表头参数导致的。
  • 格式规则不兼容多类型日期:你指定的格式串中%Y仅匹配4位年份,遇到4/19/19 8:46这类2位年份的日期时也会触发格式不匹配报错。
解决方法

1. 修复数据读取逻辑

读取数据时明确指定表头行,避免列名混入数据:

# 以csv为例,header=0表示第一行是列名
df = pd.read_csv("你的数据文件路径.csv", header=0)
# 读取后先检查前3行确认数据结构正常
print(df.head(3))

2. 兼容双年份格式的日期转换

提供两种可选方案,按需选择即可:

方案1:自动推断(小数据量首选)

不强制指定格式,让pandas自动识别两种日期格式,errors='coerce'会把无法解析的内容设为空值,方便后续排查异常数据:

df['Order Date'] = pd.to_datetime(df['Order Date'], errors='coerce')

方案2:显式分步转换(大数据量首选)

分步处理两种格式,解析效率和准确率都更高,适合十万条以上的数据量:

# 先处理4位年份的日期
df['Order Date'] = pd.to_datetime(df['Order Date'], format='%m/%d/%Y %H:%M', errors='coerce')
# 对转换失败的空值,再用2位年份的格式解析
na_mask = df['Order Date'].isna()
df.loc[na_mask, 'Order Date'] = pd.to_datetime(df.loc[na_mask, 'Order Date'], format='%m/%d/%y %H:%M', errors='coerce')

可选:修正2位年份识别偏差

pandas默认会把2位年份大于等于69的识别为19xx,小于69的识别为20xx,如果不符合你的业务需求,可以手动调整:

# 示例:所有年份大于2030的日期都减去100年,避免解析到未来时间
df['Order Date'] = df['Order Date'].mask(
    df['Order Date'].dt.year > 2030,
    df['Order Date'] - pd.DateOffset(years=100)
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:24:06