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

从dd/mm/yy格式注册日期列提取年份报ParserError超范围问题

错误原因

抛出ParserError: year 44091 is out of range: 44091.57292的核心原因是Registration date列并非全是你认知里的dd/mm/yy hh:mm:ss格式文本,其中混杂了Excel存储日期用的数值型序列号:

  • Excel的日期存储规则是将1899-12-30记为起点0,每过1天序列号加1,小数部分对应当天的时分秒占比,你看到的44091.57292实际对应2020-09-11 13:45左右的时间,是合法的日期存储值。
  • 你之前用的日期解析逻辑只适配了dd/mm/yy hh:mm:ss格式的文本,碰到这类纯数值时,会错误把数值的整数部分识别为年份字段,44091远超出日期类支持的年份范围,直接触发解析报错。
  • 这类混存问题一般是读取Excel文件时产生的:列内部分单元格被设为数值格式、部分是文本格式的日期,pandas默认不会自动对类型混杂的列做统一日期转换,会把Excel的原始序列号原样读入DataFrame。
修复步骤
  • 不要用默认无参数的日期转换方法硬转整列,需要针对两类存储值分别写解析规则。
  • 使用自定义解析函数适配混合格式的日期列,参考实现(pandas数据处理场景):
import pandas as pd

def parse_reg_date(val):
    # 处理数值型Excel日期序列号,origin参数对齐Excel的日期计算规则
    if pd.notna(val) and isinstance(val, (int, float)):
        return pd.to_datetime(val, unit="D", origin="1899-12-30")
    # 处理文本型dd/mm/yy hh:mm:ss格式日期,明确指定格式避免日月解析错位
    return pd.to_datetime(val, format="%d/%m/%y %H:%M:%S", errors="coerce")

# 应用到目标列完成datetime类型转换
df["Registration date"] = df["Registration date"].apply(parse_reg_date)
  • 转换完成后随机抽取3-5行原报错位置的记录做校验,确认日期解析结果符合业务预期后,直接用.dt.year就能正常提取年份,不会再触发越界错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:39:17