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)