目前我有两个数据框。我试图使用fuzzywuzzy的process.extractOne函数进行客户名称的模糊匹配。当我在示例数据上运行以下脚本时,我得到了良好的结果并且没有错误,但是当我在当前数据帧上运行以下操作时,我得到属性和类型错误。出于安全原因,我无法提供数据,但如果有人能够根据提供的脚本弄清楚我为什么会收到错误,那么我将非常感激。
names2 = list(dftr3['Common Name'])
names3 = dict(zip(names2,names2))
def get_fuzz_match(row):
match = process.extractOne(row['CLIENT_NAME'],choices = n3.keys(),score_cutoff = 80)
if match:
return n3[match[0]]
return np.nan
dfmi4['Match Name'] = dfmi4.apply(get_fuzz_match, axis=1)
我知道没有一些示例会使解决问题变得更加困难,因此我将回答任何问题并编辑帖子以帮助完成此过程。具体错误是:
1.AttributeError:'dict_keys'对象没有属性'items'
2.TypeError:期望的字符串或缓冲区
答案 0 :(得分:1)
我认为,AttributeError很简单,而且可以预料到。 Fuzzywuzzy的process.extract
函数执行process.extractOne
中的大部分实际工作,使用try:... except:
子句来确定是将choices
参数处理为dict-like还是list-like 。我认为您正在看到异常,因为在except:
子句期间引发了TypeError。
TypeError更难以确定,但我怀疑它出现在StringProcessor
类的某个地方,在processor
模块中使用,再次由extract
调用,它使用了几个字符串方法并没有捕获例外。因此,您的apply
调用似乎正在传递非字符串的内容。你有可能有空单元吗?