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

如何用正则表达式为Python DataFrame新增Category分类列?

问题描述

现有如下Python DataFrame:

ColumnAFile
Firstaasdkh.xls
SecondsadkhZ.xls
ThirdasdasdPH.xls
Fourthadsjklahsd.xls

需要新增Category列,规则如下:

  • 文件名后缀.xls前无特殊标识的普通文件标记为N
  • 文件名后缀.xls前含Z标记为Z
  • 文件名后缀.xls前含PH标记为PH

目标DataFrame如下:

ColumnAFileCategory
Firstaasdkh.xlsN
SecondsadkhZ.xlsZ
ThirdasdasdPH.xlsPH
FourthadsjklahsdPH.xlsPH

已定义正则表达式但不清楚用法:

regex_Z = re.compile('Z.xls$')    
regex_PH = re.compile('PH.xls$')

同时需要推荐正则表达式学习资源。


解决方案

方法一:apply结合预编译正则匹配

先修正正则(.需要转义为\.,否则会匹配任意字符),再通过自定义函数对每行的File值做匹配:

import pandas as pd
import re

# 构建示例数据
df = pd.DataFrame({
    'ColumnA': ['First', 'Second', 'Third', 'Fourth'],
    'File': ['aasdkh.xls', 'sadkhZ.xls', 'asdasdPH.xls', 'adsjklahsdPH.xls']
})

# 预编译修正后的正则
regex_Z = re.compile(r'Z\.xls$')    
regex_PH = re.compile(r'PH\.xls$')

# 自定义分类函数
def get_category(filename):
    if regex_PH.search(filename):
        return 'PH'
    elif regex_Z.search(filename):
        return 'Z'
    else:
        return 'N'

# 新增Category列
df['Category'] = df['File'].apply(get_category)

方法二:str.contains简洁实现

无需预编译正则,直接用pandas的字符串方法批量匹配,逻辑更直观:

import pandas as pd

df = pd.DataFrame({
    'ColumnA': ['First', 'Second', 'Third', 'Fourth'],
    'File': ['aasdkh.xls', 'sadkhZ.xls', 'asdasdPH.xls', 'adsjklahsdPH.xls']
})

# 先默认设为N,再按规则覆盖
df['Category'] = 'N'
df.loc[df['File'].str.contains(r'PH\.xls$'), 'Category'] = 'PH'
df.loc[df['File'].str.contains(r'Z\.xls$'), 'Category'] = 'Z'

正则学习资源推荐

  • Python官方文档的正则表达式章节:系统讲解Python正则的语法、函数和示例,是最权威的参考
  • 在线正则测试工具:可以实时输入正则和测试文本,查看匹配结果,帮助快速理解匹配逻辑
  • 编程教程平台的正则专项课程:从入门到进阶覆盖常见场景,适合系统学习正则的应用技巧

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 19:05:22