Pandas如何通过正则为DataFrame列中指定数字字符串片段加括号
pandas 对DataFrame列做正则动态替换的正确实现
直接使用带捕获组的正则搭配str.replace即可实现需求,核心替换代码如下:
df["Superheros"] = df["Superheros"].str.replace( pat=r'\bis Nr (\d+)\b', repl=r'(Nr \1)', regex=True )
逻辑说明
- 正则模式中用圆括号
()包裹需要保留的动态数字部分,这部分就是捕获组,替换字符串中用\1即可引用第一个捕获组匹配到的实际内容,自动适配任意长度的数字后缀。 - 前后加
\b单词边界是为了避免误匹配其他非目标片段(比如超级英雄名称末尾刚好带"is"字符的极端场景)。 - 显式指定
regex=True是为了兼容不同pandas版本的默认参数差异,避免部分版本默认关闭正则匹配导致替换失效。
原有写法的问题
- 第一种写法直接在替换字符串里写
\d,不会自动映射匹配到的数字,只会把\d当成普通字符串写入结果,核心原因是没有通过捕获组引用动态匹配内容。 - 第二种写法调用
str.re.sub是错误的API用法,pandas Series的.str访问器下没有挂载re子模块,正则替换直接通过.str.replace()传入正则参数即可。
运行代码后得到的结果完全符合预期:
0 Spiderman (Nr 1) 1 Batman (Nr 4) 2 Joker 3 Iron Man (Nr 2) 4 Hulk 5 Captain America 6 Wonderwoman (Nr 3) Name: Superheros, dtype: object
如果后续数字格式有变化(比如多位数、带小数位),只需要调整捕获组内的正则匹配规则即可,替换逻辑不需要改动。
内容的提问来源于stack exchange,提问作者Carina
相关产品推荐
相关产品推荐

