基于另一DataFrame列修正DataFrame列值的Python问题
解决方案:模糊匹配修正拼写错误
merge是精确匹配,无法处理拼写错误、大小写差异或部分匹配的场景,所以得用模糊字符串匹配来实现需求。这里推荐用fuzzywuzzy库(基于Levenshtein距离计算字符串相似度),具体步骤如下:
1. 安装依赖库
如果还没安装fuzzywuzzy,先执行:
pip install fuzzywuzzy python-Levenshtein
python-Levenshtein是可选依赖,能提升匹配速度。
2. 具体实现代码
import pandas as pd from fuzzywuzzy import process # 原始数据 df1 = pd.DataFrame({'col1': ['apple', 'banana', 'cherry', 'apple', 'cherry']}) df2 = pd.DataFrame({'col1': ['app Banana', 'Cherry', 'banana', 'apple', 'bnapple', 'apple ch']}) # 提取df1中的唯一正确名称(去重后作为匹配候选) valid_names = df1['col1'].unique().tolist() # 定义匹配函数:对每个输入字符串,返回候选列表中相似度最高的名称 def match_correct_name(s): # process.extractOne返回(匹配到的名称, 相似度得分),取第一个元素 return process.extractOne(s, valid_names)[0] # 应用函数修正df2的col1 df2['col1'] = df2['col1'].apply(match_correct_name) print(df2)
3. 结果验证
运行后输出的df2与预期一致:
col1 0 banana 1 cherry 2 banana 3 apple 4 apple 5 apple
补充说明
- 如果需要调整匹配严格程度,可在
process.extractOne中添加score_cutoff参数,比如score_cutoff=80,只有相似度≥80的才会匹配,否则返回None(需额外处理)。 fuzzywuzzy默认忽略大小写差异,无需额外转换字符串格式。
内容的提问来源于stack exchange,提问作者Kush
相关产品推荐
相关产品推荐

