2016-01-08 165 views
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”对象有没有属性“项目”

2.TypeError:预期字符串或缓冲区

回答

1

的AttributeError的很简单,可以预料的,我想。 Fuzzywuzzy的process.extract函数用于执行process.extractOne中的大部分实际工作,它使用try:... except:子句来确定是否将choices参数处理为类似字母表或列表形式。我认为你看到了异常,因为在except:条款中引发了TypeError。

的类型错误是棘手的牵制,但我怀疑它在StringProcessor班,processor模块中使用,再由extract调用,它使用几个字符串的方法和没有捕获异常,某些地方存在。所以看起来你的apply调用传递的不是字符串。是否有可能有空单元?