Pandas DataFrame列值替换问题:处理riskID中字符后含数字/特殊字符场景
解决DataFrame中riskID列值替换问题
问题分析
现有代码的核心问题是筛选条件m2错误限制了需要处理的行:仅判断riskID包含-或_才执行替换,但像70317380CH71(数字后接字符+数字)、70317380CH&?(数字后接特殊字符)这类不包含-/_的行,无法被选中处理,导致输出不符合预期。
解决方案
去掉不必要的m2筛选条件,直接对所有locationCity和locationCountryCode均不为空的行执行替换操作。修改后的代码如下:
# 筛选城市和国家编码都不为空的行 m1 = new_df[['locationCity', 'locationCountryCode']].notna().all(axis=1) # 替换符合条件的riskID:提取开头连续数字 + 去空格的城市名 + 国家编码 new_df.loc[m1, 'riskID'] = ( new_df.loc[m1, 'riskID'].str.extract('^(\d+)', expand=False) + new_df.loc[m1, 'locationCity'].str.replace(' ', '') + new_df.loc[m1, 'locationCountryCode'] )
代码说明
- 筛选逻辑:仅保留
locationCity和locationCountryCode都有值的行,确保替换时有完整的拼接数据源。 - 数字提取:
str.extract('^(\d+)')可以精准提取riskID开头的连续数字,无论后续是字母、数字还是特殊字符都不受影响。 - 字符串拼接:将提取的数字、去空格的城市名、国家编码拼接,得到预期的
riskID格式。
效果验证
- 原
riskID为70317380CH71的行,处理后变为70317380PRATTELNCH - 原
riskID为70317380CH&?的行,处理后变为70317380GALECH - 原本已符合格式的行(如
70520366HONGKONGHK)替换后结果保持不变,无需额外处理。
内容的提问来源于stack exchange,提问作者aeapen
相关产品推荐
相关产品推荐

