Python pandas如何将DataFrame列元素替换为已知列表的最接近字符串匹配
错误原因
difflib.get_close_matches的第一个参数要求传入单个字符串,你直接传入了完整的name列Series对象,函数无法正常匹配返回空列表,空列表长度和DataFrame的行数不匹配,因此抛出ValueError。
解决方法
通过apply逐行处理name列的每一个字符串,单独为每个值匹配最接近的候选名,同时可以自定义匹配不到时的默认返回值避免报错。
完整可运行代码
import pandas as pd import difflib df_names = pd.read_csv('names/wrong.csv') possible_names = ['mark', 'anthony', 'jack'] # 定义匹配函数 def match_correct_name(raw_name): # n=1表示只返回最相似的1个结果,cutoff为相似度阈值(0~1,值越低匹配宽松度越高) match_res = difflib.get_close_matches(raw_name, possible_names, n=1, cutoff=0.5) # 匹配成功返回结果,失败返回None或你自定义的占位符 return match_res[0] if match_res else None df_names['correct_name'] = df_names['name'].apply(match_correct_name)
你可以根据实际拼写错误的程度调整cutoff参数的取值,适配不同的匹配场景。
内容的提问来源于stack exchange,提问作者Carlo
相关产品推荐
相关产品推荐

