使用FuzzyWuzzy模糊去重时生成多余列的问题求助
解决模糊去重后新增多余列的问题
问题分析
你使用的dedupe_FuzzyWuzzy.deduplication函数返回结果时自动添加了Matches和Combined列,不符合仅保留原CSV列、每组模糊重复数据只留首行的需求。以下两种方案可解决该问题:
方案一:处理现有函数返回结果
若仍想依赖dedupe_FuzzyWuzzy库,只需在得到结果后筛选原始列,并确保仅保留每组模糊重复的首行:
import pandas as pd from dedupe_FuzzyWuzzy import deduplication # 读取原始数据并完成精确去重 df = pd.read_csv('/path/input.csv') df = df.drop_duplicates(subset='text', keep='first').reset_index(drop=True) # 执行模糊去重 df_final = deduplication.deduplication(df, ['text'], threshold=90) # 1. 移除多余列,仅保留原始数据的列 df_final = df_final[df.columns] # 2. 若函数仅标记匹配组未自动去重,按分组列保留首行(示例用'Cluster ID',需替换为实际分组列名) # 可先打印df_final.columns查看实际分组列 if 'Cluster ID' in df_final.columns: df_final = df_final.groupby('Cluster ID').first().reset_index(drop=True) # 保存最终结果 df_final.to_csv('/path/deduplicated.csv', index=False)
方案二:手动实现模糊去重(无多余列)
若想完全控制输出结构,直接用fuzzywuzzy手动实现去重逻辑:
import pandas as pd from fuzzywuzzy import fuzz, process # 读取原始数据并完成精确去重 df = pd.read_csv('/path/input.csv') df = df.drop_duplicates(subset='text', keep='first').reset_index(drop=True) keep_indices = [] processed_rows = set() # 遍历每行,匹配度≥90%的归为一组,仅保留组内首行 for idx, current_text in enumerate(df['text']): if idx not in processed_rows: keep_indices.append(idx) # 查找所有匹配度达标的文本 matches = process.extract(current_text, df['text'], scorer=fuzz.ratio, limit=None) # 收集匹配项的索引并标记为已处理 match_indices = [df[df['text'] == match[0]].index[0] for match in matches if match[1] >= 90] processed_rows.update(match_indices) # 筛选需要保留的行 df_final = df.loc[keep_indices] # 保存去重后的CSV df_final.to_csv('/path/deduplicated.csv', index=False)
说明
- 方案一适配现有库的使用场景,需注意确认
deduplication函数返回的分组列名称。 - 方案二更灵活,完全自定义去重逻辑,确保输出仅包含原始列且严格保留每组首行。
内容的提问来源于stack exchange,提问作者jms
相关产品推荐
相关产品推荐

