我有两个列表,我想将包含正则表达式模式列表的第一个列表与我的值列表进行匹配。此外,计算这些值与正则表达式匹配的次数。最后,我想将这些统计数据发送到一个新的数据帧。
以下是一个细分:
列表1:
regex_list = ['Error: Look ','Parking Charge Notice', '^Follow Up$']
清单2:
value_list = ['Follow Up','abc123','abc123', 'Error: Look', 'Follow Up']
我希望新数据帧的输出看起来像:
pattern, count
'Error: Look', 1
'^Follow Up$', 2
'Parking Charge Notice': 0
正如您所看到的,我的新数据帧显示了与列表1匹配的值以及它在列表2中匹配的次数。
到目前为止,这是我的python:
import re
regex_list = ['Error: Look ', 'Parking Charge Notice', '^Follow Up$']
value_list = ['Follow Up', 'abc123', 'abc123', 'Error: Look', 'Follow Up']
p = re.compile(r'^Follow Up$')
matches = p.findall(value_list)
这是我的输出:
Traceback (most recent call last):
File "C:/Users/e136320/PycharmProjects/scrape_imsva_v2/working/regex_test.py", line 35, in <module>
matches = p.findall(value_list)
TypeError: expected string or bytes-like object
我收到上面显示的错误。有没有一种方法可以自动循环我的regex列表,过滤掉我的value_list中的实例,然后将模式及其计数放入数据帧中?
我知道我的代码不多,但我是python和数据帧的新手,所以我完全迷失了方向,所以任何想法或建议都会有所帮助。
您可以尝试以下代码:
import re
import pandas as pd
regex_list = ['Error: Look', 'Parking Charge Notice', '^Follow Up$']
value_list = ['Follow Up', 'abc123', 'abc123', 'Error: Look', 'Follow Up']
df = pd.DataFrame()
for j in regex_list:
p = re.compile(j)
for i in value_list:
matches = p.findall(i)
if len(matches)!=0:
df = df.append({'regex':j,'matched':matches},ignore_index = True)
print(df)
count=df.groupby('regex')['matched'].count().reset_index()
count.columns = ['regex','count']
print(count)
根据您发布的错误消息,您正在向findall传递导致问题的值列表。