我正在對地址進行一些模糊匹配,并且正在篩選高分。如果該分數存在于我的資料集中,那么我想呼叫另一個函式來查看資料并檢查是否有與之相關的銷售/電話。
我想最終回傳一個符合該函式條件的值串列。在除錯時,我可以看到“sales_and_calls_test”功能有效。我看到值被附加到我的串列中,但是,當我進入下一次迭代時,我看到除錯監視中的串列從一個值更改為“名稱錯誤:名稱“call_list sales_list”未定義
有人可以查看我的語法并告訴我我缺少什么嗎?謝謝!
這是我的代碼:
def sales_and_calls_test(v_sales, v_calls):
calls_list = []
sales_list = []
if v_sales > 1:
print(v_sales, v._1)
sales_list.append(v_sales)
if v_calls > 1:
print(v_calls, v._1)
calls_list.append(v_calls)
return calls_list, sales_list
for v in match_table.itertuples():
#print(v)
if not string_len_test(l.Address_1, v.Address_2):
lev_score = lev(l.Address_1, v.Address_2)
fuzz_score = fuzz.token_sort_ratio(l.Address_1, v.Address_2)
if fuzz_score >= 90:
sales_and_calls_test(v._6, v._7)
#print(lev_score, fuzz_score)
else:
if fuzz_score == 87:
print('close', v.Address, l.Address_2, v._1, v._6, v._7, v._8)
print(lev_score, fuzz_score)
else:
continue
##*** side note does anyone know why after I perform itertuples()
## that some of my column's change from their names to _number?
uj5u.com熱心網友回復:
我想到了。我必須讓我的第一個函式回傳真/假。
然后我意識到我需要更好地比較不同的字串,長度太籠統了。相反,我選擇使用 Jaro 距離。
我為距離設定了一個條件,然后如果滿足該條件,我將回傳一個值“True”
這大大減少了我的資料!然后我呼叫了“sales_and_calls_test”函式并更新了回傳值以回傳串列,如果它不符合條件,則通過(這進一步減少了我的資料!)
這是我的更新:
def sales_and_calls_test(v_sales, v_calls):
if v_sales > 1:
sales_list.append(v_sales)
return sales_list
elif v_calls > 1:
calls_list.append(v_calls)
return calls_list
else:
pass
for v in match_table.itertuples():
#print(v)
if string_len_test(l.Address_1, v.Address_2) == True:
lev_score = lev(l.Address_1, v.Address_2)
fuzz_score = fuzz.token_sort_ratio(l.Address_1, v.Address_2)
if fuzz_score >= 90:
sales_and_calls_test(v._6, v._7)
#print(lev_score, fuzz_score)
else:
if fuzz_score == 87:
print('close', v.Address, l.Address_2, v._1, v._6, v._7, v._8)
print(lev_score, fuzz_score)
else:
continue
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/384800.html
