Самый быстрый способ заменить часть строки в серии Pandas, если она содержит слово в списке - PullRequest
3 голосов
/ 01 мая 2019

У меня большой набор данных all_transcripts с почти 3 миллионами строк. Один из столбцов msgText содержит письменные сообщения.

>>> all_transcripts['msgText']

['this is my first message']
['second message is here']
['this is my third message']

Кроме того, у меня есть список из 200+ слов, который называется gemeentes.

>>> gemeentes
['first','second','third' ... ]

Если слово в этом списке содержится в msgText, я хочу заменить его другим словом. Для этого я создал функцию:

def replaceCity(text):
    newText = text.replace(plaatsnaam, 'woonplaats')
    return str(newText)

Итак, мой желаемый результат будет выглядеть так:

['this is my woonplaats message']
['woonplaats message is here']
['this is my woonplaats message']

В настоящее время я перебираю список и для каждого элемента в моем списке применяю функцию replaceCity.

for plaatsnaam in gemeentes:
    global(plaatsnaam)
    all_transcripts['filtered_text'] = test.msgText.apply(replaceCity)

Однако это занимает очень много времени, поэтому, похоже, неэффективно. Есть ли более быстрый способ выполнить эту задачу?


Этот пост ( Алгоритм поиска совпадений нескольких строк ) похож, но моя проблема в другом, потому что:

  • здесь есть только один большой кусок текста, в то время как у меня есть набор данных с множеством разных строк

  • Я хочу заменить слова, а не просто найти слова.

1 Ответ

2 голосов
/ 01 мая 2019

Предположим, all_transcripts - это панда DataFrame:

all_transcripts['msgText'].str.replace('|'.join(gemeentes),'woonplaats')

Пример:

all_transcripts = pd.DataFrame([['this is my first message'],
                                ['second message is here'],
                                ['this is my third message']],
                               columns=['msgText'])
gemeentes = ['first','second','third']

all_transcripts['msgText'].str.replace('|'.join(gemeentes),'woonplaats')

выходы

0    this is my woonplaats message
1       woonplaats message is here
2    this is my woonplaats message
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...