Использование:
import pandas as pd
df1 = pd.DataFrame({'Data' : ["Hull Damage happened and its insured by maritime hull insurence company","Non Cash Entry and claims are blocked"]})
df2 = pd.DataFrame({ 'Find' : ["Insurence","Non cash entry"],
'Replace' : ["Insurance","Blocked"],
})
find_repl = dict(zip(df2['Find'].str.lower(), df2['Replace'].str.lower()))
d2 = {r'(\b){}(\b)'.format(k):r'\1{}\2'.format(v) for k,v in find_repl.items()}
df1['Data_1'] = df1['Data'].str.lower().replace(d2, regex=True)
Вывод
>>> print(df1['Data_1'].tolist())
['hull damage happened and its insured by maritime hull insurance company', 'blocked and claims are blocked']
Пояснение
dict(zip(df2['Find'].str.lower(), df2['Replace'].str.lower()))
создает отображение междуто, что вы хотите заменить, и строку, которую вы хотите заменить -
{'insurence': 'insurance', 'non cash entry': 'blocked'}
Преобразовать поиски в regex
, чтобы подготовить их к поиску -
d2 = {r'(\b){}(\b)'.format(k):r'\1{}\2'.format(v) for k,v in find_repl.items()}
{'(\\b)insurence(\\b)': '\\1insurance\\2', '(\\b)non cash entry(\\b)': '\\1blocked\\2'}
Последняя часть просто делает фактическую замену -
df1['Data_1'] = df1['Data'].str.lower().replace(d2, regex=True)
Примечание: я сделал .lower()
везде, чтобы найти подходящие совпадения.Очевидно, вы можете изменить его так, как вы хотите.