Pandas dataframe列名尾部后缀替换时$结束符不识别如何解决?
问题根因
你代码里用的是Python原生的str.replace()方法,它只做普通字符串的字面匹配,不支持正则语法,你加的$会被当成普通字符处理,不会被识别为「字符串结尾」的正则标记,因此没有列名能匹配_n$这个字面串,自然没有替换效果。
而你去掉$后替换_n时,_ncmplt中包含的_n子串会被优先匹配替换,就会出现an_dom_n_kwh_cmplt的错误结果。
正确实现方案
方案1:后缀匹配法(零正则成本,最稳妥)
直接判断列名是否以目标后缀结尾,匹配成功再追加_kwh,完全不会出现误匹配问题:
# 直接填写目标后缀即可,不需要加正则符号 suffix_list = ['_n', '_ncmplt', '_pop'] filterfuel = 'kwh' # 把所有要处理的DataFrame存入列表,不用重复写多份逻辑 dfs = [dfdom, dfpa, dfsw] for df in dfs: new_cols = [] for col in df.columns: for suffix in suffix_list: if col.endswith(suffix): col = f"{col}_{filterfuel}" break # 匹配到一个后缀就跳出,避免重复处理 new_cols.append(col) df.columns = new_cols
方案2:正则匹配法
如果要用到$结尾标记,需要调用pandas内置支持正则的替换方法:
import re # 合并后缀为正则规则,$标记字符串结尾 pattern = r'(_n|_ncmplt|_pop)$' filterfuel = 'kwh' for df in [dfdom, dfpa, dfsw]: # 开启正则模式,\1引用匹配到的后缀内容 df.columns = df.columns.str.replace(pattern, rf'\1_{filterfuel}', regex=True)
内容的提问来源于stack exchange,提问作者SModi
相关产品推荐
相关产品推荐

