如何在Pandas中批量重命名指定列为同一名称?
解决Pandas批量将指定列重命名为同一名称的问题
这个问题我之前实操时也踩过坑!Pandas的列索引(Index对象)是不可变类型,所以直接通过切片赋值df.columns[1::3] = ['SomeName']会触发TypeError("Index does not support mutable operations"),下面给你几个实用的解决方案,不用手动逐个修改:
方法1:将列索引转为列表后修改(最直观)
先把不可变的Index转成可变的列表,修改目标位置的元素后再重新赋值给df.columns:
import pandas as pd df = pd.read_csv('New.csv') # 将列索引转为列表 cols = df.columns.tolist() # 遍历从索引1开始的每第3列,修改列名 for i in range(1, len(cols), 3): cols[i] = 'SomeName' # 重新赋值列索引 df.columns = cols
方法2:用df.rename()结合字典推导式(简洁优雅)
通过字典推导式生成「原列名→新列名」的映射,再传给rename()方法,适合需要明确映射关系的场景:
import pandas as pd df = pd.read_csv('New.csv') # 生成重名字典:目标列都映射到'SomeName' rename_map = {col: 'SomeName' for col in df.columns[1::3]} # 执行重命名(inplace=True可直接修改原DataFrame) df.rename(columns=rename_map, inplace=True)
方法3:利用numpy数组修改(高效批量操作)
把列索引转为可变的numpy数组,直接切片赋值后再转回列索引:
import pandas as pd df = pd.read_csv('New.csv') # 转为numpy数组(可变类型) cols_array = df.columns.to_numpy() # 批量修改指定切片位置的列名 cols_array[1::3] = 'SomeName' # 重新赋值列索引 df.columns = cols_array
小提示
- 如果你的Pandas版本≥2.0,也可以用
df.set_axis()配合列表推导式实现,但本质和方法1类似; - 注意:如果多个列重命名为同一名称,后续操作时通过列名取值会返回多列的DataFrame,而不是单一列,这一点要留意哦!
内容的提问来源于stack exchange,提问作者user96564
相关产品推荐
相关产品推荐

