如何将Pandas Series元素传入DataFrame?遍历错误序列的最优方法
高效匹配日志错误编号与错误描述的方法
你现在已经从日志数据表Log_frame里提取出了当日唯一的错误编号序列p,想要批量匹配Dev_frame里的错误描述,不用手动一个个索引对吧?其实Pandas有非常高效的内置方法,完全不用写for循环(当然如果有特殊业务逻辑,循环也能实现,但优先推荐内置操作),下面给你详细说两种方案:
一、推荐:用Pandas矢量化操作直接匹配(高效简洁)
1. 直接提取所有匹配的错误描述记录
如果你只是想拿到所有出现过的错误对应的描述信息,直接用isin()方法过滤Dev_frame就行,一行代码搞定:
matched_errors = Dev_frame[Dev_frame['Fehler-Nr.'].isin(p)]
运行后matched_errors就是包含所有当日出现过的错误编号对应的描述、原因的DataFrame,结构和Dev_frame一致,而且这个操作是Pandas的矢量化操作,底层用C实现,比Python循环快N倍,数据量越大优势越明显。
2. 把错误描述合并到原日志表中
如果想把错误描述直接关联到每一行日志里,用merge()方法更方便:
log_with_desc = Log_frame.merge( Dev_frame, left_on='ErrNo', # 日志表中的错误编号列 right_on='Fehler-Nr.', # 错误描述表中的编号列 how='left' # 左连接,保留所有日志行,没有匹配的错误(比如ErrNo=0)会显示NaN )
这样处理后,原日志的每一行都会带上对应的错误描述和原因,后续分析起来更方便。
二、如果非要用for循环(不推荐,仅作参考)
要是你有一些特殊的自定义逻辑需要在循环里处理,也可以遍历p的每个元素:
for err_no in p: # 找到当前错误编号对应的行 err_row = Dev_frame[Dev_frame['Fehler-Nr.'] == err_no] # 提取描述和原因(这里假设每个错误编号唯一,所以用values[0]取第一个值) desc = err_row['Descr'].values[0] cause = err_row['Cause'].values[0] # 这里可以加入你的自定义处理逻辑,比如打印、写入文件等 print(f"错误编号 {err_no}: 检查项[{desc}],原因[{cause}]")
不过还是要强调:这种方法在数据量较大时效率很低,而且代码冗余,优先用前面的矢量化操作。
内容的提问来源于stack exchange,提问作者Luca Consorte
相关产品推荐
相关产品推荐

