2016-01-08 218 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調用傳遞的不是字符串。是否有可能有空單元?