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

如何用Python Pandas与Difflib计算DataFrame字符串匹配相似度百分比?

解决DataFrame逐行字符串相似度打分问题

错误原因分析

  1. Attribute Error:字符串对象无ratio属性
    difflib.get_close_matches()返回的是匹配的字符串列表,不是SequenceMatcher对象,无法直接调用ratio()方法。要计算相似度,需用SequenceMatcher直接对比单个字符串对。

  2. Series对象无lower属性
    Pandas的Series没有全局lower()方法,必须用str.lower()访问器对列中每个元素单独转小写。

  3. 整列重复最佳匹配结果
    get_close_matches()是从整个Series中筛选与目标字符串最匹配的结果,并非逐行计算。要实现逐行评估,需用apply()遍历每行数据。

修正后的代码

import difflib
import pandas as pd

# 读取Excel表格
df = pd.read_excel('Filename.xlsx')

# 目标字符串统一转小写
target_str = 'This is my test question?'.lower()

# 定义相似度计算函数
def calculate_match_score(row_str):
    # 确保每行内容转为字符串并小写,兼容非字符串类型数据
    matcher = difflib.SequenceMatcher(None, target_str, str(row_str).lower())
    # 返回百分比形式得分,保留两位小数
    return round(matcher.ratio() * 100, 2)

# 逐行计算匹配得分,生成新列
df['Match_percent'] = df['questions'].apply(calculate_match_score)

代码说明

  • 先将目标字符串转小写,消除大小写对相似度判断的干扰。
  • 用str(row_str).lower()处理每行数据,避免Excel中可能存在的非字符串类型引发报错。
  • SequenceMatcher.ratio()返回0-1的相似度值,乘以100转为百分比,round()控制小数位数。
  • apply()遍历questions列的每个元素,传入自定义函数逐行计算得分。

内容的提问来源于stack exchange,提问作者Arthur D. Howland

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 09:31:03