Сравнение списка ключевых слов со столбцом свободного текста во фрейме данных и получение совпадений

#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) return i . Если вам нужно несколько совпадений, верните список или что угодно.

Ответ №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