У меня есть набор данных на Python, где я хочу удалить определенные комбинации слов столбцаX в новом столбцеY.
Пример 2 строк столбцаX:
what is good: the weather what needs improvwement: the house
what is good: everything what needs improvement: nothing
Я хочу удалить следующую комбинацию слов: «что хорошо» и «что нужно улучшить».
В итоге в столбце Y должен остаться следующий текст:
погода дом все ничего
У меня есть следующий скрипт:
stoplist = {'what is good', 'what needs improvement'}
dataset['columnY']=dataset['columnX'].apply(lambda x: ''.join([item in x.split() if item nog in stoplist]))
Но это не работает. Что я здесь делаю неправильно?
слова остаются в тексте, а не удаляются.
Какова ценность nog?
Если вы получаете ошибку, укажите ее в своем вопросе.






Может быть, вы можете работать с самими столбцами.
df["Y"] = df["X"]
df.Y = df.Y.str.replace("what is good", "")
Таким образом, вам придется сделать это для каждого элемента в вашем стоп-листе. Но я не знаю, сколько у вас предметов.
Так например
replacement_map = {"what needs improvement": "", "what is good": ""}
for old, new in replacement_map.items():
df.Y = df.Y.str.replace(old, new)
если вам нужно указать разные переводы или
items_to_replace = ["what needs improvement", "what is good"]
for item_to_replace in items_to_replace:
df.Y = df.Y.str.replace(item_to_replace, "")
если элемент всегда должен быть удален.
Или вы можете пропустить цикл, если вы выражаете его как регулярное выражение:
items_to_replace = ["what needs improvement", "what is good"]
replace_regex = r"|".join(item for item in items_to_replace)
df.Y = df.Y.str.replace(replace_regex , "")
(Кредиты: @MatBailie и @romanperekhrest)
Series.str.replace() — хорошая идея, но, поскольку она может принимать регулярные выражения, цикл не требуется. pandas.pydata.org/docs/reference/api/…Спасибо @MatBailie, добавил комментарий о регулярном выражении. Было бы большим улучшением, если бы элементы можно было упаковать в регулярное выражение.
Вы всегда можете выразить список строковых литералов в регулярном выражении, см. ответ от @romanperekhrest
В вашем случае замена не произойдет, так как условие if item not in stoplist (в item in x.split() if item not in stoplist) проверяет, соответствует ли отдельное слово какой-либо фразе из стоп-листа, что неверно.
Вместо этого объедините свои стоп-фразы в шаблон регулярного выражения (для замены), как показано ниже:
df['columnY'] = df.columnX.replace(rf"({'|'.join(f'({i})' for i in stoplist)}): ", "", regex=True)
columnX columnY
0 what is good: the weather what needs improveme... the weather the house
1 what is good: everything what needs improvemen... everything nothing
другой способ без использования регулярного выражения и по-прежнему использовать apply - использовать простую функцию:
def func(s):
for item in stoplist:
s = s.replace(item, '')
return s
df['columnY']=df['columnY'].apply(func)
Можете ли вы предоставить более подробную информацию о том, что «не работает»?