Python实现CSV球队名称模糊匹配时全为TRUE的问题排查
问题排查与修复方案
核心问题分析
你的脚本返回全TRUE是由多个逻辑错误和变量问题导致的:
- 参数与变量混乱:函数
is_similarity_above_threshold参数冗余,且循环变量name与函数参数name重名,直接覆盖了目标匹配名称;同时调用函数时使用了未定义的second_team_names变量。 - 逻辑倒置:原函数错误地遍历了未定义集合,而非遍历参考球队名称逐一计算相似度。
- 集合传入错误:将
unique_team_names集合直接传给fuzz.partial_ratio时,集合会被转为字符串(如"{'manchester united', ...}"),这种字符串与任意球队名称计算相似度时,极易误判为高匹配度,导致全TRUE。
修复后的代码
import pandas as pd from fuzzywuzzy import fuzz # 文件路径 reference_file_path = r'C:\Users\pes TEAM DEF\PES TEAM 2021 A.csv' second_file_path = r'C:\Users\pes TEAM DEF\PES TEAM 2022 A.csv' # 读取CSV文件 df_reference = pd.read_csv(reference_file_path) df_second = pd.read_csv(second_file_path) # 提取参考球队名称(转为小写+列表,方便遍历匹配) unique_team_names = df_reference['2021Name'].str.lower().tolist() # 修正匹配逻辑:检查当前名称是否与任意参考名称的部分相似度超过阈值 def is_similar(name, reference_names, threshold): return any(fuzz.partial_ratio(name, ref_name) > threshold for ref_name in reference_names) # 生成匹配结果列 df_second['PartialMatch'] = df_second['2022Name'].str.lower().apply( lambda x: is_similar(x, unique_team_names, 70) ) # 输出结果文件 output_path = "C:/Users/Downloads/pes TEAM DEF/output/abcd.csv" df_second.to_csv(output_path, index=False, encoding='utf-8-sig')
关键修复点
- 简化函数逻辑,移除冗余参数,确保遍历参考名称列表逐一计算相似度。
- 将集合转为列表,避免集合转字符串导致的错误匹配。
- 修复未定义变量问题,传入正确的参考名称列表。
- 修正变量重名问题,避免目标匹配名称被覆盖。
内容的提问来源于stack exchange,提问作者Musk Long
相关产品推荐
相关产品推荐

