@ Темно Может быть ... но я не думаю, что это предназначено для работы с пандами.

лизирую данные пандыdf1 содержащий строки строк У меня есть список ключевых слов и мне нужно удалить каждую строку вdf1 содержащий любое слово из списка литературы.

В настоящее время я делаю это так:

reference_list: ["words", "to", "remove"]
df1 = df1[~df1[0].str.contains(r"words")]
df1 = df1[~df1[0].str.contains(r"to")]
df1 = df1[~df1[0].str.contains(r"remove")]

Который не масштабируется до тысяч слов. Тем не менее, когда я делаю:

df1 = df1[~df1[0].str.contains(reference_word for reference_word in reference_list)]

Я выдаю ошибкупервый аргумент должен быть строкой или скомпилированным шаблоном.

Следующийэто Решение, я попробовал:

reference_list: "words|to|remove" 
df1 = df1[~df1[0].str.contains(reference_list)]

Что не вызывает исключения, но не разбирает все слова.

Как эффективно использовать str.contains со списком слов?

 bro-grammer22 дек. 2017 г., 08:51
Ты пробовалаэто вопрос?
 Dark22 дек. 2017 г., 08:57
@Sudonym, если вы ищете скорость по сравнению с регулярным выражением, я предлагаю вам пройти Flasktextmedium.freecodecamp.org/... для скорости 10000x
 coldspeed22 дек. 2017 г., 08:51
Сначала я присоединяюсь к словам и передаю ихstr.contains.
 Galen22 дек. 2017 г., 08:51
Когда вы говорите «не масштабируемый», вы имеете в виду кучу повторяющихся кодов? Если это так, используйте цикл:for reference_word in reference_list:
 coldspeed22 дек. 2017 г., 08:53
Вы можете остановиться на этом:Which doesn't raise an exception but doesn't parse all words eather.? Можете ли вы привести пример, который показывает, что он не работает? Потому что так и должно быть.

Ответы на вопрос(1)

Решение Вопроса

объединить содержимое слов с помощью регулярного выражения ИЛИ трубы|передать этоstr.containsиспользовать результат для фильтрацииdf1

Индексировать 0го колонка, не используйтеdf1[0] (поскольку это может считаться неоднозначным). Было бы лучше использоватьloc или жеiloc (Смотри ниже).

words = ["words", "to", "remove"]
mask = df1.iloc[:, 0].str.contains(r'\b(?:{})\b'.format('|'.join(words)))
df1 = df1[~mask]

Примечание: это также будет работать, еслиwords это серия.

В качестве альтернативы, если ваш 0го столбец является столбцом только слова (не предложения), то вы можете использоватьdf.isin, который должен быть быстрее -

df1 = df1[~df1.iloc[:, 0].isin(words)]
 sudonym22 дек. 2017 г., 09:03
опять холодная скорость - работает как шарм - большое спасибо
 coldspeed22 дек. 2017 г., 09:29
@ Темно Может быть ... но я не думаю, что это предназначено для работы с пандами.
 coldspeed22 дек. 2017 г., 09:04
@Sudonym Пожалуйста. Вы использовали содержит или isin?
 Dark22 дек. 2017 г., 09:27
@ cᴏʟᴅsᴘᴇᴇᴅ мы должны попытаться опубликовать ответ, используяflashtext это звучит многообещающе.
 sudonym22 дек. 2017 г., 09:05
str.contains, так как у меня есть предложения в iloc [:, 0]

Ваш ответ на вопрос