数据清洗中年份格式统一问题:如何修复短年份转换错误?
解决年份格式清洗的异常问题
问题分析
你的代码处理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)
代码说明
- 统一类型处理:先将所有输入转为字符串并去空白,避免整数、浮点数等非字符串类型引发的操作错误
- 兼容多分隔符:分割后取最后一段,即使存在多个
-也能正确提取最晚年份 - 格式校验:增加
isdigit()判断,过滤非数字内容干扰 - 异常兜底:对空值、无效格式返回
None,便于后续清洗或标记异常数据
内容的提问来源于stack exchange,提问作者libraG
相关产品推荐
相关产品推荐

