如何将 pandas.Series.str.contains 与 tqdm 进度图一起使用?

How to use pandas.Series.str.contains with tqdm progress map?

我正在尝试根据另一个数据框 (dfB) 的值向数据框 (dfA) 添加新列:

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))

不知道 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))

这应该比 lambda 更灵活。