如何用正则表达式为Python DataFrame新增Category分类列?
问题描述
现有如下Python DataFrame:
| ColumnA | File |
|---|---|
| First | aasdkh.xls |
| Second | sadkhZ.xls |
| Third | asdasdPH.xls |
| Fourth | adsjklahsd.xls |
需要新增Category列,规则如下:
- 文件名后缀
.xls前无特殊标识的普通文件标记为N - 文件名后缀
.xls前含Z标记为Z - 文件名后缀
.xls前含PH标记为PH
目标DataFrame如下:
| ColumnA | File | Category |
|---|---|---|
| First | aasdkh.xls | N |
| Second | sadkhZ.xls | Z |
| Third | asdasdPH.xls | PH |
| Fourth | adsjklahsdPH.xls | PH |
已定义正则表达式但不清楚用法:
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
相关产品推荐
相关产品推荐

