如何在Python中用字典替换DataFrame列名中的指定数字片段?
问题原因分析
df.replace()默认作用于DataFrame的单元格数值,不会修改列名属性,所以你调用该方法后看不到列名变化。- 就算直接对列名使用纯数字键做正则匹配,也可能出现误匹配其他位置数字的问题,建议加边界锚点提升准确性。
可行实现方案
方案1:自定义函数遍历替换(可读性最高,可灵活调整匹配规则)
import re def replace_col(col_name): # 匹配列名中被下划线包裹的3位数字段 num_match = re.search(r'_(\d{3})_', col_name) if num_match: target_num = num_match.group(1) # 匹配到映射规则就替换,否则保留原列名 if target_num in dict_2: return col_name.replace(target_num, dict_2[target_num]) return col_name # 应用到所有列名 df.columns = [replace_col(col) for col in df.columns]
运行后你的列名将变为:ab_sells_cde_AI_frm、ab_sells_cde_105_frm、ab_sells_cde_120_frm,符合需求。
方案2:使用pandas字符串方法批量替换
# 给映射规则加上下划线边界,避免误替换 pattern_dict = {rf'_{k}_': f'_{v}_' for k, v in dict_2.items()} # 将列名转为Series后调用replace,再转回列表赋值给列名 df.columns = df.columns.to_series().replace(pattern_dict, regex=True).tolist()
内容的提问来源于stack exchange,提问作者Maths12
相关产品推荐
相关产品推荐

