У меня есть несколько тысяч распространенных слов, таких как LLC, INC, CO, которые мне нужно удалить в конце нескольких миллионов названий компаний в столбце данных pandas. Следующее удаляет общие слова в любой позиции:
toexlude = dfwcomwords['ending'].tolist()
data['names'] = data['names'].apply(lambda x: ' '.join([word for word in x.split() if word not in (toexclude)]))
Но я хочу удалить только слова из конца имени, то есть "INC INTERNATIONAL LLC" должно быть "INC INTERNATIONAL". (Вышеуказанное делает его «МЕЖДУНАРОДНЫМ».) Любая помощь будет принята с благодарностью.
Редактировать: после предложения @ba_ul ниже я получаю несбалансированную ошибку скобок
for word in toexclude:
data['names'] = data['names'].apply(lambda x: re.sub(rf'{word}$', '', x, flags=re.IGNORECASE))
Traceback (most recent call last):
File "<ipython-input-139-c68049bc0f0d>", line 2, in <module>
data['names'] = data['names'].apply(lambda x: re.sub(rf'{word}$', '', x, flags=re.IGNORECASE))
File "/anaconda3/envs/pandas/lib/python3.7/site-packages/pandas/core/series.py", line 4042, in apply
mapped = lib.map_infer(values, f, convert=convert_dtype)
File "pandas/_libs/lib.pyx", line 2228, in pandas._libs.lib.map_infer
File "<ipython-input-139-c68049bc0f0d>", line 2, in <lambda>
data['names'] = data['names'].apply(lambda x: re.sub(rf'{word}$', '', x, flags=re.IGNORECASE))
File "/anaconda3/envs/pandas/lib/python3.7/re.py", line 192, in sub
return _compile(pattern, flags).sub(repl, string, count)
File "/anaconda3/envs/pandas/lib/python3.7/re.py", line 286, in _compile
p = sre_compile.compile(pattern, flags)
File "/anaconda3/envs/pandas/lib/python3.7/sre_compile.py", line 764, in compile
p = sre_parse.parse(p, flags)
File "/anaconda3/envs/pandas/lib/python3.7/sre_parse.py", line 944, in parse
raise source.error("unbalanced parenthesis")
error: unbalanced parenthesis