Pandas如何正确提取无固定格式列中的年份数据
问题场景
现有大型Pandas DataFrame,其中col列混合存储日期与地点信息,无统一格式,需要从该列提取年份存入新列yearcorrect。目前已发现该列存在三类格式样例:
col February 28, 2020 (United States) April 1990 (United States) 1981 (United States)
期望输出效果:
col yearcorrect February 28, 2020 (United States) 2020 April 1990 (United States) 1990 1981 (United States) 1981
之前尝试的实现代码:
df['yearcorrect'] = df['col'].astype(str).str.split(', ').str[-1].astype(str).str[:4]
该代码仅能正确处理第一类、第三类格式,处理第二类April 1990 (United States)时会错误返回"Apri",无法适配所有格式。
实现方案
直接用正则表达式提取字符串中的4位年份即可,不需要依赖固定分隔符拆分,适配所有已知格式,代码如下:
df['yearcorrect'] = df['col'].astype(str).str.extract(r'(\d{4})')
方案说明
- 正则规则
(\d{4})会匹配字符串中第一组连续4位数字,三类样例的匹配结果完全符合预期:- 匹配
February 28, 2020 (United States)得到2020 - 匹配
April 1990 (United States)得到1990 - 匹配
1981 (United States)得到1981
- 匹配
- 该方案不依赖固定的字段分隔符、字段位置,对格式混乱的文本适配性更强。如果后续数据中存在其他非年份的4位数字干扰,可以收紧正则规则,限定年份范围为1900-2099,将正则替换为
r'((?:19|20)\d{2})'即可避免误提取。
内容的提问来源于stack exchange,提问作者srtklein
相关产品推荐
相关产品推荐

