Python 在运行fuzzyfuzzy时,如何消除属性错误?

Python 在运行fuzzyfuzzy时,如何消除属性错误?,python,string,attributeerror,levenshtein-distance,fuzzywuzzy,Python,String,Attributeerror,Levenshtein Distance,Fuzzywuzzy,我试图比较两个列表,得到列表中每个项目的距离比。下面的代码返回了一个属性错误:“Series”对象没有属性“fuzz”。我该如何解决这个问题 “differences”是我之前代码中的一个结果,它是一个具有实际比较(精确匹配)的公司列表,df['Company']是我试图比较的数据框架中的一列 从fuzzyfuzzy导入fuzz 从模糊导入过程 str1=['差异'] str2=df[“公司”] 打印(“距离{}->{}:{}”。格式(str1,str2.fuzz.ratio(str1,str2

我试图比较两个列表,得到列表中每个项目的距离比。下面的代码返回了一个属性错误:“Series”对象没有属性“fuzz”。我该如何解决这个问题

“differences”是我之前代码中的一个结果,它是一个具有实际比较(精确匹配)的公司列表,df['Company']是我试图比较的数据框架中的一列

从fuzzyfuzzy导入fuzz
从模糊导入过程
str1=['差异']
str2=df[“公司”]
打印(“距离{}->{}:{}”。格式(str1,str2.fuzz.ratio(str1,str2)))


将str2替换为df['Company']

根据您的评论,您似乎希望在列表上迭代,并希望在系列中找到最接近的匹配项。这个答案正在使用,因为它比fuzzywuzzy快,但与fuzzywuzzy的工作方式几乎相同。要在iterable中找到最接近的匹配项,可以使用
进程。extractOne
,它将返回一个元组
(匹配,分数)
,用于普通列表,或者返回一个元组
(匹配,分数,键)
,用于提供
.items()
函数的对象,例如
dict
pandas.Series

from rapidfuzz import process, fuzz

short_list = ['differences']
companies = df['Company']
for x in short_list:
  match = process.extractOne(x, companies, scorer=fuzz.ratio, processor=None)
  print("best match for {} is {} with a score of {} at the index {}"
    .format(x, match[0], match[1], match[2]))


您使用的是str2.fuzz.ratio()而不是str2,fuzz.ratio(),这段代码不会为每个元素返回fuzz ratio(),只是尝试了一下,它仍然不起作用。只是为了澄清,['differences']和df['Company']是一个项目列表,我试图将“differences'列表中的项目a与df['Company']列中的项目a进行比较,并将其循环为B、C、D……Z。希望这能澄清我原来的问题['differences']是一个由1个元素组成的列表,还是您用倒逗号列出的其他列表?另外,在运行这个代码块后,您能告诉我错误/输出吗?“differences”是一个包含60个元素的列表。ValueError:长度必须与比较匹配。是否要将差异的每个元素与df['Company']的每个元素匹配。因此,如果差异有60个元素&df['company']有60个元素,那么总共有3600个比较?或者您需要元素匹配。就像差异的第一个元素与df[‘公司’]的第一个元素相匹配,产生60个结果一样,我看到了我现在尝试做的事情的问题。这两份名单并没有按任何顺序排列。”“差异”是较短的列表,df[“公司]是主列表。我希望将“差异”中的每个元素与df'[company]中最接近的匹配元素进行比较,并从中获得一个比率。这是因为我可以筛选出更接近的匹配项。我追求的是差异(即差异列表中的元素,而不是df['companys']列表中的元素)
from rapidfuzz import process, fuzz

short_list = ['differences']
companies = df['Company']
for x in short_list:
  match = process.extractOne(x, companies, scorer=fuzz.ratio, processor=None)
  print("best match for {} is {} with a score of {} at the index {}"
    .format(x, match[0], match[1], match[2]))