You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从CSV文件中移除匹配度达80%的相似行?

如何从CSV文件中移除相似度达80%的重复行?

要实现这个需求,你可以借助字符串相似度算法(比如编辑距离、余弦相似度)结合CSV处理工具来完成。下面以Python为例,给出具体的实现方案:

核心工具选择

  • rapidfuzz:快速计算字符串相似度的库(比fuzzywuzzy性能更优),可直接返回两个字符串的匹配百分比。
  • pandas:高效处理CSV文件的工具,方便读取、遍历和保存数据。

实现步骤与代码

1. 安装依赖库

先安装所需工具:

pip install pandas rapidfuzz

2. 完整处理代码

import pandas as pd
from rapidfuzz import fuzz

def remove_similar_rows(csv_path, output_path, threshold=80):
    # 读取CSV文件,示例数据为空格分隔,实际根据你的CSV分隔符调整
    df = pd.read_csv(csv_path, sep='\s+', engine='python')
    
    # 初始化保留列表,先加入标题行
    kept_rows = [df.iloc[0].tolist()]
    
    # 从第二行开始遍历处理
    for idx in range(1, len(df)):
        current_row = df.iloc[idx]
        current_text = current_row['StructureData']
        keep_flag = True
        
        # 和已保留的行(跳过标题)逐一比较相似度
        for row in kept_rows[1:]:
            existing_text = row[1]
            # 转小写后计算匹配度,避免大小写干扰
            similarity = fuzz.ratio(current_text.lower(), existing_text.lower())
            if similarity >= threshold:
                keep_flag = False
                break
        
        if keep_flag:
            kept_rows.append(current_row.tolist())
    
    # 转换为DataFrame并保存结果
    result_df = pd.DataFrame(kept_rows, columns=df.columns)
    result_df.to_csv(output_path, index=False, sep='\t')

# 替换为你的输入输出文件路径后调用
remove_similar_rows('input.csv', 'output.csv', threshold=80)

代码说明

  • 相似度计算:用fuzz.ratio将字符串转为小写后计算匹配度,消除大小写差异对结果的影响。
  • 保留逻辑:仅保留与已保留行相似度低于80%的行,每组高相似度行中只保留第一个出现的条目(和你提供的示例输出逻辑一致)。
  • 分隔符适配:示例输入为空格分隔的表格,实际使用时请根据你的CSV真实分隔符(如逗号,)调整pd.read_csv的sep参数。

效果验证

针对你提供的输入数据,运行代码后会得到与示例一致的输出:D80A-fructofuranosidase系列仅保留5O47行,E298Q-BETA-GALACTOSIDASE系列仅保留5IFT行,其余高相似度行均被过滤。

内容的提问来源于stack exchange,提问作者user3765252

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 07:06:22