如何根据Excel映射文件批量替换DataFrame列名为对应翻译值
问题排查
你的原有代码没有生效,核心有两个问题:
pandas的rename()方法默认返回修改后的新DataFrame对象,不会直接修改原df,你既没有加inplace=True参数也没有将返回值赋值给变量,所以改动不会保留- 手动循环遍历列名的写法冗余,且数据量较大时执行效率低
最优实现方案(无循环,符合pandas最佳实践)
直接将映射表的翻译关系转成字典,传入rename方法即可,pandas会自动完成匹配替换,匹配不到的列名会自动保留原样,完全不需要手动写判断逻辑:
# 第一步:从映射表df1生成{原列名: 西班牙译名}的映射字典 col_trans_map = df1['Spanish'].to_dict() # 第二步:直接用映射字典替换列名 df = df.rename(columns=col_trans_map)
原理解释
df.rename(columns=映射字典)的执行逻辑:
- 自动遍历df的所有列名
- 如果列名是映射字典中存在的key,就替换为对应的value
- 如果列名不在映射字典的key中,直接保留原列名
完全匹配你的需求,代码只有2行,运行效率远高于手动循环。
原有循环写法的修正版(仅作对比,不推荐使用)
如果你要坚持用循环实现,需要修改为以下写法:
new_col_list = [] for col in df.columns: if col in df1.index: new_col_list.append(df1.loc[col, 'Spanish']) else: new_col_list.append(col) # 直接给columns属性赋值完成替换 df.columns = new_col_list
不推荐在循环中反复调用rename+inplace=True,会反复修改DataFrame对象,性能更差。
内容的提问来源于stack exchange,提问作者Herc01
相关产品推荐
相关产品推荐

