Regex 如何将pandas.Series.str.contains与TQM进度图一起使用?
我正在尝试根据另一个数据帧(Regex 如何将pandas.Series.str.contains与TQM进度图一起使用?,regex,pandas,tqdm,Regex,Pandas,Tqdm,我正在尝试根据另一个数据帧(dfB)的值向数据帧(dfA)添加一个新列: progress\u map可以用于此设置吗 dfB['value]='dfB['text\u bod]。进度图(func) 或者是否有其他方法可以实现TQM 使用FlashText的替代方法: from flashtext import KeywordProcessor s = dfA['value'].tolist() processor = KeywordProcessor() processor.add_ke
dfB
)的值向数据帧(dfA
)添加一个新列:
progress\u map
可以用于此设置吗
dfB['value]='dfB['text\u bod]。进度图(func)
或者是否有其他方法可以实现TQM
使用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\u 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更具灵活性。尝试一下真是太棒了!用我的测试数据运行大约需要2个小时。有没有一种方法可以让它从第一个数据帧或NaN if DNE而不是True/False输出值?@lauren.he你的意思是类似于
dfB['text_bod']的东西。progress_map(lambda x:x if re.search('.|'。join(s),x)else np.NaN)
?啊,我几乎认为这给出了找到值的整个文本体。我想从dfA['value']
中提取单个匹配值,并将其放入dfB['value']
这似乎有效:test['value']=test['communication\u body'].progress\u map(lambda x:re.search('|'.join(s),x)。如果re.search('|'.join(s),x)则为组(0)
不支持多个匹配值hmmm@lauren.he您不需要调用re.search
两次。您可以定义一个函数def foo(x,s):
并在那里实现您的代码。lambda对于代码的运行并不重要,可以是任何函数。
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))