如何基于fuzzywuzzy模糊匹配得分修改Pandas DataFrame列值
解决方案
报错原因
fuzz.ratio()仅支持传入单个字符串完成匹配度计算,你直接将整列df['make'](Series类型)传入函数,会触发类型不匹配导致的真值判断歧义错误。
实现方案
方案1:搭配apply使用fuzzywuzzy(小数据量可用)
逐行遍历列内容完成匹配判断:
from fuzzywuzzy import fuzz df['make'] = df['make'].apply( lambda x: "Mercedes" if fuzz.ratio(x, "Mercedes") >= 80 else x )
方案2:使用RapidFuzz(大数据量首选,效率提升10倍以上)
RapidFuzz是fuzzywuzzy的C++优化版本,原生支持批量向量运算,不需要逐行遍历,非常适合大体量DataFrame使用:
- 先安装依赖:
pip install rapidfuzz
- 执行批量替换:
from rapidfuzz import fuzz # 直接批量计算整列和目标字符串的匹配度,生成布尔掩码 match_mask = fuzz.ratio(df['make'], "Mercedes") >= 80 # 替换匹配成功的行 df.loc[match_mask, 'make'] = "Mercedes"
额外优化建议
- 仅对
make单列做修改即可,不要直接对整个DataFrame调用where/mask,避免全表无意义操作 - 如果需要同时替换多个品牌,可将目标品牌存入列表循环处理,或调用RapidFuzz的process模块实现多目标批量匹配,效率更高
内容的提问来源于stack exchange,提问作者arnoldhenry
相关产品推荐
相关产品推荐

