使用不规则的 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()”似乎给了我最好的匹配,但在整个数据帧中重复。
有没有办法只评估相应行中的字符串(小写)并返回匹配分数?
我相信您正在尝试使用
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
就是你想要的。