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

Python/Pandas新手:从文本列提取固定格式错误码至新列

提取工单错误码并统计频次的最优方案

嘿,针对你这种从IT工单CSV的自由文本里提取固定格式错误码的需求,正则表达式搭配Pandas的字符串方法绝对是最顺手高效的方案——刚好适配你已经熟练使用的groupby工作流,而且完全贴合你当前Python/Numpy学习阶段的实践场景。下面一步步给你拆解实现:

1. 提取错误码到新列

假设你的DataFrame叫df,存储问题描述的列名叫problem_description,直接用Pandas的str.extract()就能一键提取匹配的错误码:

import pandas as pd

# 读取你的工单CSV(替换成实际文件路径)
df = pd.read_csv('it_tickets.csv')

# 用正则精准提取ERR+5位数字的错误码,生成新列error_code
df['error_code'] = df['problem_description'].str.extract(r'(ERR\d{5})', expand=False)

正则小解释:

  • (ERR\d{5}):专门匹配以ERR开头、后面紧跟5位数字的完整字符串,括号用来捕获我们需要的整个错误码
  • expand=False:让方法返回一个Series,直接就能作为新列塞进DataFrame里,不用额外转换

要是遇到有些工单里有多个错误码的情况,也可以用str.findall()把所有匹配项捞出来,再用逗号拼接成字符串:

# 提取所有错误码,多个的话用逗号分隔
df['error_codes'] = df['problem_description'].str.findall(r'ERR\d{5}').str.join(', ')

2. 处理没有错误码的情况

有些工单可能没填错误码,新列会出现NaN,你可以根据需求填充:

# 填充为空字符串
df['error_code'] = df['error_code'].fillna('')
# 或者统一标记成"无错误码"方便统计
df['error_code'] = df['error_code'].fillna('NO_ERROR_CODE')

3. 统计错误码出现频次

这部分你已经熟门熟路啦,不过除了groupby,用value_counts()会更简洁直接:

# 统计每个错误码的出现次数,按频次降序排列
error_counts = df['error_code'].value_counts().reset_index()
# 重命名列名让结果更清晰
error_counts.columns = ['error_code', 'occurrences']

# 要是你偏爱用groupby,结果是一样的,写法稍长一点
error_counts_groupby = df.groupby('error_code') \
                         .size() \
                         .reset_index(name='occurrences') \
                         .sort_values('occurrences', ascending=False)

为啥说这是最优方案?

  • 精准不翻车:正则完全贴合你给定的错误码格式,不会误提取类似ERR1234(少一位)或者ERRABCDE(非数字)的无效内容
  • 高效省时间:Pandas的字符串方法是向量化操作,比写循环快得多,应付工单这种可能有成千上万条数据的场景毫无压力
  • 无缝衔接现有工作流:提取后的新列直接在DataFrame里,后续统计、分析都能和你已经会用的groupby完美配合

要是你想练Numpy的话,也可以用np.vectorize套正则来实现,但Pandas的方法更贴合DataFrame的使用场景,代码也更简洁,日常用起来更顺手~


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 19:12:28