如何替换Pandas DataFrame中以BR开头的字符串列最后三个字符
解决巴西邮政编码批量替换问题
你之前的代码没生效,核心问题是用了.all()方法——它要求所有邮政编码都以BR开头才会执行替换,但你的数据里包含GB、NO等其他国家的编码,导致条件永远不成立,替换逻辑根本没运行。
下面是几种可行的修正方案:
方法一:布尔索引定位替换
先筛选出以BR开头的行,再针对性替换:
# 生成筛选条件:定位所有BR开头的邮政编码 mask = df['postcode'].str.startswith('BR') # 对符合条件的行,替换最后三个字符为000 df.loc[mask, 'postcode'] = df.loc[mask, 'postcode'].str.replace(r'.{3}$', '000')
方法二:用numpy.where简化逻辑
通过条件判断直接完成赋值,代码更紧凑:
import numpy as np df['postcode'] = np.where( df['postcode'].str.startswith('BR'), df['postcode'].str.replace(r'.{3}$', '000'), df['postcode'] # 不符合条件的编码保持原样 )
方法三:用str.slice_replace直观操作
如果明确要替换最后三位,用切片替换的可读性更强:
mask = df['postcode'].str.startswith('BR') df.loc[mask, 'postcode'] = df.loc[mask, 'postcode'].str.slice_replace(start=-3, repl='000')
执行任意一种方案后,所有BR开头的邮政编码最后三位都会被替换为000,其他国家的编码则保持原格式不变。
内容的提问来源于stack exchange,提问作者cal192
相关产品推荐
相关产品推荐

