Python 3.12 Pandas Difflib Get_Close_Matches 比较数据框中的两个字符串并返回 % 匹配

问题描述 投票:0回答:1

使用不规则的 Excel 表时,我尝试通过查看数据框中列中的字符串来匹配问题,如果它与我的目标字符串非常匹配,则得分 % 匹配。

我尝试的方法是创建一个新列,对 % 匹配进行评分并输出分数:

import difflib
import pandas as pd

df = pd.read_excel('Filename.xlsx')

# Create a string to check for % match
x = 'This is my test question?'

# Compare the string to a string in the df in the column df.questions and create a % match score
df['Match_percent'] = difflib.get_close_matches(x.lower(), df.questions.astype(str).lower())[0].ratio()

三件事是错误的—— 属性错误:字符串对象没有属性“比率”。
Series 对于第二个小写表达式没有属性“lower”。
删除“ratio()”和第二个“lower()”似乎给了我最好的匹配,但在整个数据帧中重复。

有没有办法只评估相应行中的字符串(小写)并返回匹配分数?

pandas string-matching difflib
1个回答
0
投票

我相信您正在尝试使用

difflib
计算测试字符串与每行中每个字符串的比率。没有示例输入,所以我创建了自己的。

import difflib
import pandas as pd

df = pd.DataFrame(
    {
        "questions": ["jiMmM?", "jAMmy?", "bobbY?", "no?"],
        "other_col": list("1111"),
    }
)
x = "JIMMYYY?"
df["Match_percent"] = df.questions.apply(
    lambda _x: difflib.SequenceMatcher(None, _x.lower(), x.lower()).ratio()
)

difflib.get_close_matches()
找到字符串列表和字符串之间最接近的匹配;从字符串列表中。
SequenceMatcher
就是你想要的。

© www.soinside.com 2019 - 2024. All rights reserved.