首页 > 解决方案 > 如何将 pandas.Series.str.contains 与 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))

标签: regexpandastqdm

解决方案


不知道一种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 具有更大的灵活性。


推荐阅读