Как использовать pandas.Series.str.contains с картой прогресса tqdm? - PullRequest
2 голосов
/ 10 апреля 2019

Я пытаюсь добавить новый столбец в фрейм данных (dfA) на основе значений из другого фрейма данных (dfB):

s = dfA['value'].tolist() 
dfB['value'] = dfB['text_bod'].str.contains('|'.join(s))

Можно ли использовать progress_map с этой настройкой?

dfB['value] = 'dfB['text_bod].progress_map(func)'

Или есть какой-то другой способ реализации tqdm?


Альтернативный метод с использованием FlashText:

from flashtext import KeywordProcessor

s = dfA['value'].tolist()

processor = KeywordProcessor()
processor.add_keywords_from_list(s)

dfB['value'] = dfB['text_bod'].progress_map(lambda x: processor.extract_keywords(x))

1 Ответ

1 голос
/ 10 апреля 2019

Не знает способ str.contains, но вы можете использовать progress_map с обратным вызовом, который делает то же самое, но с re.search:

import re
dfB['value'] = dfB['text_bod'].progress_map(
    lambda x: bool(re.search('|'.join(s), x))
)

В качестве функции вы можете использовать

def extract(x, p):
    m = p.search(x)
    if m:
        return m.groups(0)
    return np.nan

p = re.compile('|'.join(s))
dfB['value'] = dfB['text_bod'].progress_map(lambda x: extract(x, p))

Это должно позволить вам большую гибкость, чем лямбда.

...