如何在R语言中拆分含额外信息的Year列?
拆分Year列的年份与额外信息
基于Python Pandas的解决方案
针对Year列同时包含年份(或年份范围)与额外描述的情况,用正则表达式提取是最直接的方式,以下是两种适配不同格式的实现:
方法1:适配带括号的额外信息
如果你的Year列主要是「年份/年份范围 + (额外信息)」的格式(比如2018 (Special Issue)、2016–2017),可以用str.extract一次性拆分出两列:
import pandas as pd # 读取数据集(根据实际文件格式调整,如xlsx) df = pd.read_csv("your_data.csv") # 正则提取年份/年份范围、括号内的额外信息 df[["Year_Cleaned", "Extra_Info"]] = df["Year"].str.extract(r"^(\d{4}(?:–\d{4})?)(?:\s*\((.*)\))?$") # 填充空值为空白字符串 df["Extra_Info"] = df["Extra_Info"].fillna("") # 查看拆分结果 print(df[["Year", "Year_Cleaned", "Extra_Info"]])
正则说明:
^(\d{4}(?:–\d{4})?):匹配开头的纯年份或年份范围(如2016或2016–2017),作为清理后的年份列(?:\s*\((.*)\))?$:匹配可选的括号内容,提取括号内的文本作为额外信息列,非捕获组(?:...)避免生成多余列
方法2:适配更复杂的无括号格式
如果Year列存在无括号的额外信息(比如2020 - 特别版),可以按「数字+连接符」的边界拆分:
import pandas as pd df = pd.read_csv("your_data.csv") # 提取年份/年份范围部分 df["Year_Cleaned"] = df["Year"].str.extract(r"^([\d–]+)") # 移除年份部分,剩余内容作为额外信息 df["Extra_Info"] = df["Year"].str.replace(r"^[\d–]+\s*", "", regex=True) # 清理空值 df["Extra_Info"] = df["Extra_Info"].replace("", pd.NA).fillna("")
验证结果
运行代码后,你可以通过df.head()查看拆分后的列,确认是否符合预期。如果还有特殊格式没覆盖,你可以提供具体的Year列示例,再调整正则表达式。
内容的提问来源于stack exchange,提问作者underbrown
相关产品推荐
相关产品推荐

