Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 针对单个列匹配多个正则表达式(并将匹配项制成表格)_Python_Regex_Python 3.x_Pandas_Dataframe - Fatal编程技术网

Python 针对单个列匹配多个正则表达式(并将匹配项制成表格)

Python 针对单个列匹配多个正则表达式(并将匹配项制成表格),python,regex,python-3.x,pandas,dataframe,Python,Regex,Python 3.x,Pandas,Dataframe,我想知道有多少项/文档被正则表达式匹配。最终结果应如下格式所示: data = [['Regular Expression 1', 10], ['Regular Expression 2', 15]] final = pd.DataFrame(data, columns = ['Regular Expression', 'Count']) 下面是文本文档的示例数据集 foo = pd.DataFrame({'a' : [1,2,3,4,5], 'b'

我想知道有多少项/文档被正则表达式匹配。最终结果应如下格式所示:

data = [['Regular Expression 1', 10], ['Regular Expression 2', 15]]
final = pd.DataFrame(data, columns = ['Regular Expression', 'Count']) 
下面是文本文档的示例数据集

foo = pd.DataFrame({'a' : [1,2,3,4,5], 
                    'b' : ['hi whatever something',
                           'foo', 'fat a a a foo', 'cat', 'fat']})
下面是计算数据的正则表达式

g1 = foo['b'][foo['b'].str.contains(r'(?=.*foo)(?=.*fat)|(\bwhatever\b)',regex=True)].count()
g2 = foo['b'][foo['b'].str.contains(r'\bfat\W+(?:\w+\W+){0,5}?foo\b',regex=True)].count()
g1  # 2 
g2  # 1
如何连接(R中的rbind)数据行?所以我可以让数据看起来像对象“Final”


我尝试了
pd.concat([g1,g2],axis=0)
,但是我从使用concat得到了这个错误消息:
无法连接非NDFrame对象
在循环中使用
str.contains
,然后
concat
结果并调用
sum

R = [r'(?=.*foo)(?=.*fat)|(\bwhatever\b)', r'\bfat\W+(?:\w+\W+){0,5}?foo\b']
df = pd.concat({r: foo['b'].str.contains(r) for r in R}, axis=1)

df.sum().rename_axis('regex').reset_index(name='count')

                               regex  count
0  (?=.*foo)(?=.*fat)|(\bwhatever\b)      2
1      \bfat\W+(?:\w+\W+){0,5}?foo\b      1

您已经让正则表达式匹配工作正常了,所以您的问题归结为“如何连接(R中的pandas等价
rbind
)行?”。在标题中说“连接[到一个数据帧或系列]”而不是“将结果制成表格”,因为“制成表格”意味着“生成一个频率表,计算每个值的频率”,即pandas
value\u counts()
;这是一个副本;唯一的问题是它。@smci这里发生了很多事情,concat不足以完全解决这个问题。@cs95但是OP已经解决了他们的正则表达式匹配问题。然后,它归结为“针对df应用多个正则表达式,将结果(频率表)制成表格(放入数据帧)。(更新:OP确实需要表格,我上面的评论我不清楚他们想要它)@smci他们在某种意义上解决了这个问题,是的,但是你需要知道你在做什么,从他们当前的输出到他们预期的输出,特别是考虑到他们一次使用一个正则表达式。我同意这当然与连接数据帧有关,但在关闭它之前我会仔细考虑。我还重新命名了这个问题作为匹配多个正则表达式的一个,而不是串联的一个,这应该算是保持它的开放性。但这只是我的2c。