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

数据清洗中年份格式统一问题:如何修复短年份转换错误?

解决年份格式清洗的异常问题

问题分析

你的代码处理2010-14时返回0-14,核心原因是:

  • 未统一将输入转为字符串,非字符串类型的年份会触发异常处理逻辑
  • 未处理包含多个-的异常格式(比如误输入的2010-0-14)
  • 未去除字符串中的空格等隐藏字符,导致分割后的长度判断错误

修正后的代码

def clean_year(year):
    # 统一转换为字符串并去除首尾空白
    year_str = str(year).strip()
    
    # 处理空值或无效输入
    if not year_str:
        return None
    
    # 匹配4位纯数字年份
    if year_str.isdigit() and len(year_str) == 4:
        return year_str
    
    # 处理含分隔符的年份范围
    elif '-' in year_str:
        # 按'-'分割所有部分,取最后一段作为结束年份
        parts = year_str.split('-')
        end_part = parts[-1].strip()
        
        # 处理2位年份后缀(默认补20前缀,若涉及90年代可调整为19)
        if len(end_part) == 2 and end_part.isdigit():
            return f'20{end_part}'
        # 处理4位结束年份
        elif len(end_part) == 4 and end_part.isdigit():
            return end_part
        # 无效格式返回None,方便后续筛选处理
        else:
            return None
    # 其他格式返回None
    else:
        return None

dataset1['Year'] = dataset1['Year'].apply(clean_year)

代码说明

  1. 统一类型处理:先将所有输入转为字符串并去空白,避免整数、浮点数等非字符串类型引发的操作错误
  2. 兼容多分隔符:分割后取最后一段,即使存在多个-也能正确提取最晚年份
  3. 格式校验:增加isdigit()判断,过滤非数字内容干扰
  4. 异常兜底:对空值、无效格式返回None,便于后续清洗或标记异常数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 01:12:49