使用循环重命名DataFrame列时仅生效第一个列表元素的问题
问题分析与解决
你写的嵌套循环逻辑完全错误,导致无法实现“逐个对应重命名列”的需求:
- 外层循环遍历要修改的列,内层循环遍历所有新名称,结果是每一个原列都会被反复重命名,最终所有列都会变成
column列表的最后一个元素(你说只用到第一个元素,大概率是测试时column列表只有一个元素)。
正确实现方式
方法1:用映射字典一次性重命名
假设column列表的长度和df_wine.columns[1:]的长度完全匹配,直接用zip配对原列和新名称,构造映射字典后一次性重命名:
# 生成原列与新名称的对应字典 rename_dict = dict(zip(df_wine.columns[1:], column)) # 批量重命名 df_wine = df_wine.rename(columns=rename_dict)
方法2:直接修改列名列表
如果不需要保留第一列的名称,直接替换列名列表的指定部分:
# 把列名转为可修改的列表 new_col_names = df_wine.columns.tolist() # 替换从第2列开始的所有名称 new_col_names[1:] = column # 赋值回DataFrame的列名 df_wine.columns = new_col_names
原代码错误原因
原代码中,对于每一个要修改的原列col,你都循环了column里的所有名称,每次都将col重命名为当前names。比如column = ["name1", "name2", "name3"],第一个原列会先变成name1,再被改成name2,最后变成name3;第二个原列也会重复这个过程,最终所有要修改的列都会变成name3,完全不符合“逐个对应”的预期。
内容的提问来源于stack exchange,提问作者Luis Valera
相关产品推荐
相关产品推荐

