#python #pandas #dataframe #loops #lambda
#python #pandas #фрейм данных #циклы #лямбда
Вопрос:
Я пытаюсь отсканировать столбец свободного текста фрейма данных pandas для ключевых слов, определенных в списке, и получить столбцы в фрейме данных, которые соответствуют моему списку, а также добавить matchedkeyword в качестве нового столбца в фрейм данных.
Список ключевых слов, которые я пытаюсь отсканировать
keywordlist = [‘4runner’, ‘runner’, ‘avalon’, ‘avanza’, ‘camry’]
В моем фрейме данных есть два столбца: столбец ID и столбец свободного текста, подобный этому.
ID | текст |
---|---|
1234 | у меня Toyota camry |
1233 | я люблю свой saab |
Я пытаюсь использовать следующий код для сканирования части свободного текста моего фрейма данных на наличие ключевых слов в моем списке и добавления ключевого слова в качестве метки к фрейму данных, если есть совпадение.
Желаемый результат:
ID | текст | Совпадение |
---|---|---|
1234 | у меня Toyota camry | camry |
1233 | я люблю свой saab | NaN. |
Код:
def matches(x):
for i in keywordlist:
if x.str.contains(i) is True:
x.append(i)
else:
return None
x=posts['text']
posts['Match'] = posts.apply(lambda x: matches(x), axis = 1)
Комментарии:
1.
posts["Match"] = posts["text"].apply(lambda x: matches(x))
и вместоx.append(i)
returni
. Если вам нужно несколько совпадений, верните список или что угодно.
Ответ №1:
Простое однострочное использование str.extract
было бы,
posts['match'] = posts.text.str.extract('(' '|'.join(keywordlist) ')')
Вывод
id text match
0 1234 i own a toyota camry camry
1 1233 i love my saab NaN