使用for循环重命名DataFrame列未生效,求排查错误原因
问题原因及解决方案
问题出在哪?
pandas的rename()方法默认不会直接修改原DataFrame,而是返回一个修改后的新对象。你写的循环里每次调用rename()都只是生成了临时的新DataFrame,但既没把它重新赋值给df,也没加inplace=True参数让修改直接作用于原数据,所以原df的列名根本没变化。
另外,用循环逐个重命名列名完全没必要,效率低还麻烦,直接批量处理更合适。
正确写法
方式1:修复你的循环(不推荐,但能解决问题)
给rename()加上inplace=True参数,让修改直接作用于原DataFrame:
for col_name in df: df.rename(columns={col_name: col_name + '_x'}, inplace=True)
方式2:高效批量修改(推荐)
直接修改df.columns属性,或者用rename()的批量映射功能:
# 方法A:直接替换列名列表 df.columns = [col + '_x' for col in df.columns] # 方法B:用rename的lambda批量处理(可以选择是否原地修改) # 原地修改 df.rename(columns=lambda x: x + '_x', inplace=True) # 或者生成新的DataFrame df = df.rename(columns=lambda x: x + '_x')
内容的提问来源于stack exchange,提问作者geaa
相关产品推荐
相关产品推荐

