如何在tqdm进度图中使用pandas.Series.str.contains?

时间:2019-04-09 22:30:25

标签: regex pandas tqdm

我正在尝试根据另一个数据框(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 个答案:

答案 0 :(得分:1)

不知道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相比,这应该给您更大的灵活性。