Pandas如何使用正则删除DataFrame列中多分隔符后的所有内容
pandas 正则提取COL2目标值方案
你可以直接通过str.replace()配合正则捕获组实现需求,代码兼容Name=前后存在冗余字符的场景,鲁棒性更强:
import pandas as pd # 构造示例测试数据 tab = pd.DataFrame({ 'COL1': ['A', 'B', 'C', 'D'], 'COL2': [ 'Name=canis_lupus3099 HHYUIO jj6§è7', 'Name=bomba009 JJIJJ;HHJKN', 'Name=Test_test788_eheh;NHHhh', 'Name=UYEYEHJ0909EEHH:HEEH Jk G' ] }) # 核心处理逻辑 tab['COL2'] = tab['COL2'].str.replace( pat=r'.*(Name=[^\s;:]+).*', repl=r'\1', regex=True )
正则规则说明
模式串r'.*(Name=[^\s;:]+).*'各部分含义:
- 开头
.*:匹配Name=前缀前可能存在的任意长度冗余字符,若你的数据COL2固定以Name=开头可省略该段 (Name=[^\s;:]+):捕获组,是最终要保留的内容:- 固定匹配
Name=前缀 [^\s;:]+:匹配连续的非分隔符字符,分隔符包含空白符、分号、冒号,遇到第一个分隔符就停止匹配
- 固定匹配
- 结尾
.*:匹配有效取值后到字符串末尾的所有冗余内容
替换值r'\1'代表仅保留第一个捕获组匹配到的内容,其余匹配到的内容全部删除。
简化写法(适用固定格式场景)
如果你的COL2列固定以Name=开头,不存在前置冗余内容,可以用更简洁的写法,直接删除第一个分隔符及之后的所有内容:
tab['COL2'] = tab['COL2'].str.replace(r'[\s;:].*', '', regex=True)
处理后输出结果和预期完全一致:
COL1 COL2 0 A Name=canis_lupus3099 1 B Name=bomba009 2 C Name=Test_test788_eheh 3 D Name=UYEYEHJ0909EEHH
内容的提问来源于stack exchange,提问作者chippycentra
相关产品推荐
相关产品推荐

