循环移除DataFrame列名指定字符串时触发TypeError错误求助
解决Pandas修改列名时的Index不可变错误
你遇到的TypeError: Index does not support mutable operations,原因是Pandas的列名(Index对象)是不可变类型,不能像列表那样直接通过索引赋值修改单个元素。
正确修改列名的两种方法:
方法1:将列名转为列表修改后重新赋值
把Index转成普通列表,修改第一个元素后再赋值回DataFrame的columns属性:
for i in dataframes_list: # 将列名转为列表 cols = list(i.columns) # 修改第一列列名,移除'CODE'并清理多余空格 cols[0] = cols[0].replace('CODE', '').strip() # 重新赋值列名 i.columns = cols print(i.columns[0]) i = dosomethingtoeachdf(i) i.to_excel(f'{i.columns[0]}.xlsx')
方法2:使用rename()方法(更推荐)
Pandas的rename()方法可以安全地修改指定列名,支持原地修改或返回新对象:
for i in dataframes_list: old_col_name = i.columns[0] new_col_name = old_col_name.replace('CODE', '').strip() # 原地修改列名,无需重新赋值给i i.rename(columns={old_col_name: new_col_name}, inplace=True) print(i.columns[0]) i = dosomethingtoeachdf(i) i.to_excel(f'{i.columns[0]}.xlsx')
补充提示:
- 确保修改列名的操作在调用
dosomethingtoeachdf(i)之前完成,避免后续逻辑使用旧列名。 strip()用于清理替换后可能残留的空格(比如原列名xyz CODE替换后会变成xyz),如果不需要可以去掉。
内容的提问来源于stack exchange,提问作者byc
相关产品推荐
相关产品推荐

