Pandas使用replace函数给列内字符串中不足3位的数字补前导0
正确实现方案
你遇到的是正则替换中分组引用后接数字的歧义问题,Python的re模块支持\g<分组序号>的显式分组引用语法,完全避免和后续数字混淆的问题。
方法1:直接修改原正则替换写法
把原来的\1、\2替换为\g<1>、\g<2>即可,代码如下:
df.replace({'Freq': r'^([A-Za-z]+)(\d{2}[A-Za-z]*)$'}, {'Freq': r'\g<1>0\g<2>'}, regex=True, inplace=True)
方法2:更通用的补零方案(推荐)
如果需要同时适配1位、2位数字的补零需求(比如XXX5KHz转XXX005KHz),用拆分字段再补零的方案鲁棒性更强,不需要处理正则替换的歧义问题:
# 拆分出前缀、数字、后缀三个部分 freq_parts = df['Freq'].str.extract(r'^([A-Za-z]+)(\d+)([A-Za-z]+)$') # 数字部分补前导0到3位后重新拼接 df['Freq'] = freq_parts[0] + freq_parts[1].str.zfill(3) + freq_parts[2]
两种方案都可以实现需求,方法2适配场景更广,更推荐使用。
内容的提问来源于stack exchange,提问作者Fred Chan
相关产品推荐
相关产品推荐

