3

目前我有两个数据框。我正在尝试使用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:预期的字符串或缓冲区

4

1 回答 1

1

我认为 AttributeError 很简单,可以预料。Fuzzywuzzy 的process.extract函数在 中完成大部分实际工作process.extractOne,它使用一个try:... except:子句来确定是将choices参数处理为 dict-like 还是 list-like。except:我认为您看到了异常,因为在子句期间引发了 TypeError 。

TypeError 很难确定,但我怀疑它发生在StringProcessor类中的某个地方,在processor模块中使用,再次调用 by extract,它使用多个字符串方法并且不捕获异常。因此,您的调用似乎很可能apply传递了不是字符串的东西。是否有可能有空单元格?

于 2016-01-09T10:01:13.323 回答