如何将数据集中同一作者的多种姓名格式统一为单一标准格式?
会议论文作者姓名标准化:高效向量化实现方案
问题背景
现有会议论文数据集,每行包含年份、标题、作者列表(均为字符串,作者以逗号分隔),示例数据如下:
Year Title Author(s) '2011' 'I watched all the Simpsons episodes in one week' 'Ludwig van Beethoven, Joseph Haydn, Wolfgang Amadeus Mozart'
为构建可在线搜索的数据库,需要统一同一作者的多种姓名变体,比如:
Wolfgang A. MozartW. A. MozartMr Wolfgang A. MozartW. A. Mozart (Austria)
目标是把这些变体全部替换为标准姓名Wolfgang Amadeus Mozart,当前循环替换的方式过于繁琐,需要更高效的向量化实现。
当前循环写法:
names = ['Wolfgang A. Mozart','W. A. Mozart','Mr Wolfgang A. Mozart','W. A. Mozart (Austria)'] for n in names: db['Authors'] = db['Authors'].str.replace(n,'Wolfgang Amadeus Mozart', regex=True)
高效向量化实现方法
方法1:正则表达式批量匹配替换
把所有变体整合成一个正则匹配模式,一次性完成替换,避免多次调用str.replace:
import re # 转义变体里的正则特殊字符(比如括号),用|分隔所有匹配项 pattern = re.compile(r'|'.join(re.escape(name) for name in names)) # 批量替换所有匹配的变体 db['Authors'] = db['Authors'].str.replace(pattern, 'Wolfgang Amadeus Mozart', regex=True)
这种方法一次遍历数据就完成所有替换,比循环效率高很多,还能避免重复修改列数据。
方法2:字典映射+Pandas原生replace
直接用字典建立「变体→标准名」的映射,Pandas会自动做向量化处理,不用写循环:
# 构建映射字典 name_map = { 'Wolfgang A. Mozart': 'Wolfgang Amadeus Mozart', 'W. A. Mozart': 'Wolfgang Amadeus Mozart', 'Mr Wolfgang A. Mozart': 'Wolfgang Amadeus Mozart', 'W. A. Mozart (Austria)': 'Wolfgang Amadeus Mozart' } # 精确匹配替换,关闭正则模式 db['Authors'] = db['Authors'].str.replace(name_map, regex=False)
如果需要更灵活的匹配(比如忽略空格、匹配带后缀的变体),可以把字典的键改成正则表达式,同时打开regex=True:
# 正则映射:匹配带头衔、后缀的变体 regex_name_map = { r'Mr\s+Wolfgang\s+A\.\s+Mozart': 'Wolfgang Amadeus Mozart', r'W\.\s+A\.\s+Mozart(\s+\(.*\))?': 'Wolfgang Amadeus Mozart', r'Wolfgang\s+A\.\s+Mozart': 'Wolfgang Amadeus Mozart' } db['Authors'] = db['Authors'].str.replace(regex_name_map, regex=True)
方法3:拆分-替换-合并(精准处理单个作者)
如果担心变体和其他作者姓名片段重叠,可以先把作者列表拆分成单个作者,替换后再合并:
# 拆分每个行的作者列表为独立列 split_authors = db['Authors'].str.split(',\s+', expand=True) # 对每个作者应用映射替换 standardized_authors = split_authors.replace(name_map, regex=False) # 合并回逗号分隔的字符串,去掉空值 db['Authors'] = standardized_authors.apply(lambda row: ', '.join(row.dropna()), axis=1)
这种方式能确保只替换完整的作者姓名,不会误改其他内容。
内容的提问来源于stack exchange,提问作者Alasdair
相关产品推荐
相关产品推荐

