Python如何基于两个字典动态重命名DataFrame海量列?
解决方案
你可以通过自定义列名重命名函数,结合Pandas的rename方法实现需求。核心思路是基于最后一个下划线拆分每个列名的前缀和后缀,再用你定义的两个字典分别替换,最后拼接成新列名。
具体实现代码
import pandas as pd # 你的映射字典 dict_1 = {"QA1" : "electric", "Q8_r1_c3" : "solar", "Q19b_5" : "urban"} dict_2 = {"_1" : "Restaurants", "_2" : "Hotels", "_32" : "School"} # 替换成你的实际DataFrame df = pd.DataFrame(columns=["QA1_1", "Q8_r1_c3_1", "Q19b_5_1", "QA1_32", "Q8_r1_c3_32", "Q19b_5_32"]) # 定义重命名函数 def rename_col(col): # 定位最后一个下划线,拆分前缀和后缀 last_underscore = col.rfind('_') prefix = col[:last_underscore] suffix = col[last_underscore:] # 字典映射,键不存在则保留原内容(可选逻辑) new_prefix = dict_1.get(prefix, prefix) new_suffix = dict_2.get(suffix, suffix) # 拼接新列名 return f"{new_prefix}_{new_suffix}" # 应用重命名 df.rename(columns=rename_col, inplace=True) # 查看结果 print(df.columns.tolist())
关键细节说明
- 用
rfind('_')拆分:因为前缀(比如Q8_r1_c3)本身包含下划线,只有定位最后一个下划线才能准确拆分出后缀(比如_1),避免误拆前缀里的下划线。 dict.get(key, default):如果某个列名的前缀/后缀不在字典中,会保留原内容,避免报错(可根据需求调整为抛出异常或其他处理逻辑)。- 性能:该方法处理4000列完全没问题,Pandas的
rename遍历列名时效率优异。
内容的提问来源于stack exchange,提问作者Ouhla
相关产品推荐
相关产品推荐

