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

pandas调用pd.to_datetime转换日期列报格式不匹配问题咨询

报错原因

你指定的日期格式%m/%d/%Y仅能匹配06/13/1980这类斜杠分隔的「数字月/日/年」结构,和实际存储的June 13, 1980 (United States)字符串结构完全不符:

  • 月份部分是完整英文名称(如June),不是两位数数字
  • 日期各部分用空格、逗号分隔,不是斜杠
  • 日期末尾还带括号包裹的地区无关内容,不属于日期组成部分
    因此格式匹配直接失败触发报错。
解决方法

方法1:快速自动解析(适合小数据集、列内日期格式不统一的场景)

pandas 2.0及以上版本支持mixed格式模式,可自动识别常见日期结构,同时自动忽略末尾非日期的冗余内容,代码如下:

df['format_released'] = pd.to_datetime(df['released'], format='mixed', errors='coerce')

参数说明:

  • errors='coerce':把无法解析的异常值统一转为NaT(时间类型空值),不会中断整体转换流程,后续可单独筛选异常值排查

方法2:预处理+指定精确格式(适合大数据集、追求转换效率的场景)

先把字符串末尾括号包裹的无关内容切除,再按照有效日期的实际结构指定格式转换,转换速度比自动推断高10~100倍,适合百万行以上的数据集:

# 1. 用正则删除括号及内部的所有内容,再去掉首尾多余空格
df['temp_date'] = df['released'].str.replace(r'\(.*\)', '', regex=True).str.strip()
# 2. 按有效日期结构指定格式:%B对应完整英文月份名,%d对应两位日期,%Y对应四位年份
df['format_released'] = pd.to_datetime(df['temp_date'], format='%B %d, %Y', errors='coerce')
# 3. 删除临时列
df.drop(columns='temp_date', inplace=True)
常用日期格式符参考

避免后续再写错格式匹配规则:

  • %m:两位数字月份(01-12)
  • %b:英文月份缩写(Jan、Jun等)
  • %B:完整英文月份名(January、June等)
  • %d:两位数字日期(01-31)
  • %Y:四位数字年份(1980、2024等)
  • %y:两位数字年份(80代表1980、24代表2024)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:42:18