Pandas设置DataFrame列名报错:AttributeError: can't set attribute 'columns'
解决Pandas DataFrame重命名列时的AttributeError问题
错误原因
出现AttributeError: can't set attribute 'columns',大概率是因为你操作的data不是一个独立的Pandas DataFrame副本,而是从其他DataFrame衍生出的视图(view),或是某些特殊子类对象(比如分组后的临时对象)。这类对象的columns属性被限制直接赋值修改。
解决方案
1. 转换为独立DataFrame副本后修改列名
先把data转换成真正的DataFrame副本,再直接赋值列名:
import pandas as pd # 先转为独立DataFrame data = pd.DataFrame(data) # 赋值完整的100个列名列表 data.columns = ["ide_ads", "ide_any", "ide_sfdsdf", ...]
2. 使用rename方法修改列名
rename方法对视图类对象兼容性更好,两种写法可选:
- 适配所有Pandas版本:用字典映射原列名和新列名
# 用zip把原列名和新列名配对成字典 new_columns = ["ide_ads", "ide_any", "ide_sfdsdf", ...] # 完整列名列表 data = data.rename(columns=dict(zip(data.columns, new_columns)))
- Pandas 1.3.0及以上版本:直接传入列名列表
data = data.rename(columns=["ide_ads", "ide_any", "ide_sfdsdf", ...])
3. 先确认对象类型
先打印data的类型,排除非DataFrame的情况:
print(type(data))
如果输出不是<class 'pandas.core.frame.DataFrame'>,比如是Series或GroupBy对象,需要先转换成DataFrame再操作。
内容的提问来源于stack exchange,提问作者Jose Maria Acevedo Reinoso
相关产品推荐
相关产品推荐

