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

如何在Pandas中将19、2019格式的年份统一转换为2019格式?

统一转换混合格式年份为四位格式的解决方法

问题原因

你执行pd.to_datetime(chelsea["Year"], format="%y")报错,是因为%y强制要求输入为两位年份,而列中存在四位年份(如2019),无法被完全解析,因此触发ValueError。

解决方案

方法1:按字符串长度补全(明确世纪范围)

如果确定两位年份都属于20xx(比如19对应2019),可以直接按字符串长度补全:

# 转为字符串类型,确保统一处理
chelsea['Year'] = chelsea['Year'].astype(str)

# 两位年份补全为四位,四位年份保持不变
chelsea['Year'] = chelsea['Year'].apply(lambda x: f"20{x}" if len(x) == 2 else x)

# 转换为整数类型的四位年份(或保留datetime类型)
chelsea['Year'] = pd.to_numeric(chelsea['Year'], errors='coerce')

如果两位年份属于19xx(比如93对应1993),只需把f"20{x}"改成f"19{x}"即可。

方法2:异常捕获自动解析(鲁棒性强)

如果需要自动推断两位年份对应的世纪(Python默认规则:00-69→2000-2069,70-99→1970-1999),可以用try-except处理:

def parse_year(year_val):
    try:
        # 尝试解析两位年份
        return pd.to_datetime(year_val, format="%y").year
    except ValueError:
        # 失败则解析四位年份
        return pd.to_datetime(year_val, format="%Y").year

# 应用函数转换
chelsea['Year'] = chelsea['Year'].apply(parse_year)

这种方法能自动适配两种格式,无需手动指定世纪,适合多数通用场景。

方法3:提取数字后统一处理(应对脏数据)

如果列中存在非数字干扰字符(比如19年、2019.),先提取纯数字再处理:

# 提取字符串中的所有数字字符
chelsea['Year'] = chelsea['Year'].astype(str).str.extract(r'(\d+)', expand=False)

# 按长度补全或保留
chelsea['Year'] = chelsea['Year'].apply(
    lambda x: x if len(x) == 4 else f"20{x}" if len(x) == 2 else None
)

# 转为数值类型,无效值设为NaN
chelsea['Year'] = pd.to_numeric(chelsea['Year'], errors='coerce')

内容的提问来源于stack exchange,提问作者Muhammad Anas Atiq

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 10:35:24