我有一个来自测试回归失败的错误消息csv,我正在将它导入一个pandas数据帧,但是我想找到一些与异常相关的子字符串。你知道吗
我用.csv的内容填充数据框,如下所示:
df = pd.read_csv('ErrorMessage3.csv', header=None, sep=',',
names=['ErrorMessage'])
我有下面的regex和相应的测试字符串(这是错误消息的dataframe列中的第一个条目),它正好返回我想要的结果:
teststring = "Step 13 - Iteration 1 Failed: Action: <Update Latest CC Exp
Date Record from Epay Account {DBServer;UserName;Password='',
DatabaseName='',Year Offset='-10'}> --->
System.Data.SqlTypes.SqlNullValueException: Data is Null. This method or
property cannotbecalled
on Null values. ---> System.Data.SqlTypes.SqlNullValueException2: Data is Null."
re.findall(r"---> ([^:]+): ", teststring)
从而产生以下输出:
['System.Data.SqlTypes.SqlNullValueException',
'System.Data.SqlTypes.SqlNullValueException2']
但我希望能够在我的数据帧中添加这个作为“例外”列。我以为这样行得通:
df['Exceptions'] = df['ErrorMessage'].str.extract(r"---> ([^:]+): ")
但当我运行它时,我会添加“Exceptions”列,但所有行都是NaN。我验证了我的ErrorMessage是object类型,并且我使用了一个在线regex测试程序来验证我的ErrorMessage条目中至少有一个子集确实包含与我的regex匹配的异常。我读过一些类似的堆栈溢出问题,但我运气不太好。你知道吗
为什么将regex应用于数据帧会产生nan,而将其应用于单个字符串会返回我想要的结果?你知道吗
正如@Trenton\u M指出的,extractall返回一个新的多索引数据帧,因此一种解决方案是使用
groupby
,然后连接所有匹配的字符串。你知道吗下面是一个简单的演示:
输出:
extractall返回一个新的多索引DataFrame,其中第一个索引将匹配原始DataFrame索引,第二个索引将是提取或匹配的次数。原始数据帧和新数据帧不兼容。
相关问题 更多 >
编程相关推荐