我有兩個資料框架,其中只有一個關鍵列,而且是人們的全名。這兩列和他們的拼寫有不一致的地方。例如,一個名字可能少了一個字母,一個名字的前綴如先生(另一個df沒有),多余的空格,等等。我已經仔細檢查過,在兩個資料框架中,這些列都是物件型別/字串。我想合并這兩個資料框架。
代碼
from fuzzywuzzy import fuzz
from fuzzywuzzy import process
df1["BestMatch"] = df1["FULL_NAME"] 。 map(lambda x: process.extractOne(x,df2["FULL_NAME"]) [0]
給了我一個錯誤
TypeError: expected string or bytes like object
我也試過
#import difflib
#difflib.get_close_matches。
df1['FULL_NAME'] = df1['FULL_NAME'] 。 apply(lambda x: difflib.get_close_matches(x,df2['FULL_NAME']) [0]
給了我一個錯誤
IndexError: list index out of range。
我一直在尋找如何修復這些錯誤/代碼,但似乎沒有什么能完全給我正確的答案。我的經驗相對較少,我猜測有一些東西我是遺漏的,但我不確定它是什么。
uj5u.com熱心網友回復:
你在df1的FULL_NAME列中有NaN。
可重復的錯誤:
df1 = pd.DataFrame({'FULL_NAME': ['Louis', np.nan, 'Alexandre']})
df2 = pd.DataFrame({'FULL_NAME': ['Mr Louis', 'Mr Paul', 'Mr Alexandre']})
>>> df1["FULL_NAME"/span>]。 map(lambda x: process.extractOne(x, df2["FULL_NAME"]) [0]
...
TypeError: 預計字串or bytes-like object。
如何避免這種情況。dropna在apply/map之前。
df1['BestMatch'] = df1["FULL_NAME"].dropna()。 map(lambda x: process.extractOne(x,df2["FULL_NAME"]) [0]
>>> df1
FULL_NAME最佳匹配
0 Louis Mr Louis
1 NaN NaN
2 Alexandre Mr Alexandre
我寫了一個類似的答案,關于如何使用fuzzywuzzy合并到資料框架。https://stackoverflow.com/a/68945895/15239951
除錯。 嘗試手動除錯:
for x in df1['FULL_NAME'/span>]。
try:
b = process.extractOne(x, df2["FULL_NAME"]) [0]
print(f"{x} <-> {b}"/span>)
except TypeError:
print(f "XXX Problem with '{x}'")
輸出:
Louis <-> Mr Louis
XXX問題 with 'nan'
Alexandre <-> Mr Alexandre
合并使用索引[2]而不是最佳匹配名稱[0]:
df1 = pd.DataFrame({'FULL_NAME': ['Louis', np.nan, 'Alexandre'],
'DATA1'/span>: [10, 20, 30]})
df2 = pd.DataFrame({'FULL_NAME': ['Mr Louis', 'Mr Paul', 'Mr Alexandre'] 。
'DATA2'/span>: [11, 21, 31]})
best_match_index = lambda x: process.extractOne(x,df2["FULL_NAME"]) [2]
df1['BestMatch'] = df1["FULL_NAME"].dropna().map(best_match_index)。
out = df2.merge(df1, left_index=True, right_on='BestMatch', how='left')
輸出
out
FULL_NAME_x DATA2 FULL_NAME_y DATA1 BestMatch
0.0 Mr Louis 11 Louis 10.0 0
NaN 保羅先生 21 NaN NaN 1
2.0 Mr Alexandre 31 Alexandre 30.0 2
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/320170.html
標籤:
上一篇:在Python中為詞組添加前綴
下一篇:我如何將這些數字連在一起?
