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

Pandas使用%y解析日期默认转为20xx而非19xx的问题求助

解决Pandas两位数年份转换为19xx而非20xx的问题

当使用pd.to_datetime(df['date'], format='%d.%m.%y')处理28.01.58时,Pandas默认将00-69区间的两位数年份映射到2000-2069,所以得到2058-01-28。要得到期望的1958-01-28,可以用以下几种方法:

方法1:转换后批量调整年份

先完成初始转换,再对超过阈值的年份减去100年(阈值可根据业务需求调整,比如设为2030):

import pandas as pd

df['date'] = pd.to_datetime(df['date'], format='%d.%m.%y')
# 对年份大于2030的日期,减去100年
df.loc[df['date'].dt.year > 2030, 'date'] -= pd.DateOffset(years=100)

方法2:自定义函数处理单个日期

通过datetime模块手动判断并调整年份,适合需要更精细控制的场景:

from datetime import datetime, timedelta
import pandas as pd

def fix_year(date_str):
    dt = datetime.strptime(date_str, '%d.%m.%y')
    # 若年份超过当前年份(示例为2024),则减100年
    if dt.year > 2024:
        dt -= timedelta(days=36524)  # 近似100年的天数
    return dt

df['date'] = df['date'].apply(fix_year)

方法3:提前补全年份为四位数

直接修改日期字符串,将两位数年份补全为四位数后再转换:

import pandas as pd

# 对末尾两位数年份,小于60则补19,否则补20
df['date'] = pd.to_datetime(
    df['date'].str.replace(r'(\d{2})$', lambda m: '19' + m.group(1) if int(m.group(1)) < 60 else '20' + m.group(1)),
    format='%d.%m.%Y'
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 18:50:26