Python 在系列上应用Re模块时遇到问题
我无法将以下内容应用到我的系列中Python 在系列上应用Re模块时遇到问题,python,Python,我无法将以下内容应用到我的系列中 Data['Notes'] 0 2018-06-07 09:38:14Z -- legal -- As per ... 1 2018-06-05 12:48:26Z -- name -- Holdin... 2 2018-06-05 17:15:48Z -- filing -- Answe... 3 2018-06-11 08:34:53Z -- name -- lvm i... 4 201
Data['Notes']
0 2018-06-07 09:38:14Z -- legal -- As per ...
1 2018-06-05 12:48:26Z -- name -- Holdin...
2 2018-06-05 17:15:48Z -- filing -- Answe...
3 2018-06-11 08:34:53Z -- name -- lvm i...
4 2018-05-11 08:31:26Z -- filed -- summo...
5 2018-06-01 16:07:11Z -- Name Rogers -- sent ...
import re
keywords = {'file', 'filing', 'legal'}
max_words_after = 5
key_re = re.compile(fr"""
(?:{'|'.join([w for w in keywords])}) #keyword options group
\s((?:[\s]?[A-Za-z\']+[\s]?) #capture word. include with line-breaks
{{1,{max_words_after}}}) #1 to max_words_after
""", re.VERBOSE|re.IGNORECASE
)
for f in data['Notes']:
data['Result'] = key_re.findall(f)
作为回应,我得到的只是
“ValueError:值的长度与索引的长度不匹配。”
请告诉我如何获得每个索引位置的结果,并将其附加到数据框内的新系列。了解您的错误
key_re.findall(f)返回一个大小不同的列表(我认为会找到0或1个关键字,但根据您的re
表达式,可能会更多)
您正在向所有行广播这是您的数据帧,当然它没有相同数量的项。因此,“值的长度与索引的长度不匹配。”
我不认为那是你想做的。我认为您希望基于另一列创建一个新列。有关详细信息,请参阅,但这里是适用于您的情况的
修复代码
这是我想要的关于数据变量的信息。我可以复制、粘贴并运行的内容:
Data = pd.DataFrame([["2018-06-07 09:38:14Z -- legal -- As per ..."],["2018-06-05 12:48:26Z -- name -- Holdin..."]], columns=["Notes"])
创建执行所需转换的函数
def find_key_words(row):
keywords = {'file', 'filing', 'legal'}
max_words_after = 5
我只包括你的re
表达式的第一行,因为当我测试它时,当我有你的完整表达式时,我总是没有结果。您可以根据需要对此进行修改
key_re = re.compile(fr"""
(?:{'|'.join([w for w in keywords])}) #keyword options group
""", re.VERBOSE|re.IGNORECASE
)
return key_re.findall(row['Notes'])
现在将该函数应用于每一行。这样,您将广播与数据['Result']预期长度相匹配的内容
Data['Result'] = Data.apply(lambda row: find_key_words(row),axis=1)
您正在覆盖每个循环的数据['result']。除此之外,我们需要知道哪些数据有帮助。请看,我很抱歉没有包括数据,但它看起来是这样的:0 2018-06-07 09:38:14Z——名称——根据。。。2018-06-05 12:48:26Z--姓名--持有。。。2018-06-05 17:15:48Z--Name--Answe…0 1 2正在通过使用数据编辑您的帖子,获得新的可扩展回复。很难在这里格式化,这对你的问题很重要。最好将其与代码一起包含,以便可以复制和运行代码。
Data['Result'] = Data.apply(lambda row: find_key_words(row),axis=1)