You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Pandas将单列原始日志数据按规则拆分为多列?

解决方案:用正则表达式拆分结构化日志数据

你可以利用正则表达式结合Pandas的str.extract()方法来精准拆分这类具有固定格式的日志数据。核心思路是通过正则捕获分组匹配你需要的5个字段:

正则表达式逻辑

针对你的日志格式,我们构建包含5个捕获组的正则:

^(\w{3} \w{3} \d{2} \d{2}:\d{2}:\d{2}) (-\d{4}) (\[.*?:) (.*?\](?:: .*?)?(?=\. |$))(?:\. (.*))?$

各分组对应字段:

  1. 第一组:匹配日期时间(如Sun Jan 11 07:46:33)
  2. 第二组:匹配时区(如-0600)
  3. 第三组:匹配AZ部分(如[LKSDFLKLKJF-56:)
  4. 第四组:匹配Error部分(从AZ后的内容到. 分隔符或行尾)
  5. 第五组:匹配Action部分(. 后的剩余内容,无分隔符则直接取行尾内容)

完整代码

import pandas as pd
import os

# 加载数据
Raw_Data_load = os.path.join("Resources", "Raw_Data.csv")
raw_data_df = pd.read_csv(Raw_Data_load)

# 定义正则表达式
pattern = r'^(\w{3} \w{3} \d{2} \d{2}:\d{2}:\d{2}) (-\d{4}) (\[.*?:) (.*?\](?:: .*?)?(?=\. |$))(?:\. (.*))?$'

# 提取分组并生成新DataFrame
split_df = raw_data_df['Raw Data'].str.extract(pattern)
split_df.columns = ['Data', 'Time', 'AZ', 'Error', 'Action']

# 处理无分隔符的行,补全Action字段
split_df['Action'] = split_df['Action'].fillna(raw_data_df['Raw Data'].str.extract(r': (.*)$')[0])

# 查看结果
print(split_df)

结果验证

运行后会得到与期望格式完全一致的DataFrame:

DataTimeAZErrorAction
Sun Jan 11 07:46:33-0600[LKSDFLKLKJF-56:bacml: warn:error]: Address failed 7a-123478563412.Reason: Failed to access remote.
Mon Feb 21 13:31:45-0400[LHHKJLKJD-01:repi_exemptXY: create.done:info]:params: {'1', 'app'}:
Thu May 15 12:33:06-0500[DRHHFJJHS-08:UDPAgentRead: SessionFailed:debug]:Session Manager (999) failed

补充说明

  • 正则中的(?=\. |$)是正向预查,确保Error部分在遇到. 或行尾时停止匹配
  • 最后的fillna处理是为了兼容没有. 分隔符的行,直接提取: 后的内容作为Action

内容的提问来源于stack exchange,提问作者Blind Bartimaeus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 13:35:24