我在我的系列中应用以下内容有困难。
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:值的长度与索引长度不匹配。“
请告诉我如何获得每个索引位置的结果,并将其附加到数据框架内的新系列中。
发布于 2018-06-14 15:36:20
理解你的错误
key_re.findall(f)返回一个不同大小的列表(我认为将找到0或1关键字,但取决于您的re表达式,它可能更多)。
您正在向所有行广播这是您的数据,当然,它没有相同数量的项目。因此,“值的长度不匹配索引的长度”。
我不认为这是你想要做的。我认为您希望在另一列的基础上创建新列。有关详细信息,请参阅this question,但下面是适用于您的情况的内容。
修正你的代码
import re
import pandas as pd下面是关于数据变量的内容。我可以复制、粘贴和运行的东西:
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)https://stackoverflow.com/questions/50842485
复制相似问题