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

解决pandas转换字符串日期时年份误判(2057替代1957)的问题

解决日期列年份解析错误的方案

问题根源

pd.to_datetime 默认以1969为分界处理两位数年份:两位数年份≥69时解析为19xx,<69时解析为20xx,因此"57"被识别为2057而非1957。

具体解决方法

  • 指定固定日期格式(最推荐)
    若Datum列的日期格式固定(如dd.mm.yy、mm/dd/yy),直接用format参数明确解析规则,配合cutoff_year调整年份映射:

    # 示例:日期格式为"日.月.两位数年份"(如"01.05.57")
    sf['Datum'] = pd.to_datetime(sf['Datum'], format='%d.%m.%y', cutoff_year=2000).dt.date
    # 若格式为"月/日/两位数年份",则改为format='%m/%d/%y'
    

    设置cutoff_year=2000后,所有两位数年份都会被解析为19xx(因为两位数年份均大于00,触发前两位减1的规则)。

  • 调整年份分界规则
    若无法确定固定格式,但明确所有两位数年份属于19xx,直接通过cutoff_year修改默认分界:

    sf['Datum'] = pd.to_datetime(sf['Datum'], cutoff_year=2000).dt.date
    

    若需要自定义分界(比如仅将≤57的两位数年份解析为19xx),可设置cutoff_year=1957。

  • 手动修正已解析的错误年份
    若已完成错误解析,可批量调整年份:

    # 先转换为datetime类型(保留时间信息以便修改)
    sf['Datum'] = pd.to_datetime(sf['Datum'])
    # 将年份超过当前年份的日期减去100年
    sf.loc[sf['Datum'].dt.year > 2024, 'Datum'] = sf['Datum'] - pd.DateOffset(years=100)
    # 再转换为date类型
    sf['Datum'] = sf['Datum'].dt.date
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 16:31:16