我正在研究泰坦尼克号的生存数据集。在我读取数据后,我更改了一个列名,然后尝试使用它。但是,更改的列名称会反映在列名称中,但不能用于特定目的,如下所示。
import pandas as pd
titanic = pd.read_excel("titanic.xls", "titanic")
print(titanic.columns.values)
给了我:
['pclass' 'survived' 'name' 'sex' 'age' 'sibsp' 'parch' 'ticket' 'fare'
'cabin' 'embarked' 'boat' 'body' 'home.dest']
现在,我更改了一个列名:
titanic.columns.values[-1] = 'home'
print(titanic.columns.values)
其中输出反映了更改的名称:
['pclass' 'survived' 'name' 'sex' 'age' 'sibsp' 'parch' 'ticket' 'fare'
'cabin' 'embarked' 'boat' 'body' 'home']
现在,如果我尝试从列中打印唯一值,
print(pd.unique(titanic.name))
我得到了所需的输出:
['Allen, Miss. Elisabeth Walton' ... ]
但在这里,
print(pd.unique(titanic.home))
我明白了,
AttributeError: 'DataFrame' object has no attribute 'home'
答案 0 :(得分:1)
这是一个链式分配问题。将值分配给列列表时,它将在数据帧的副本上运行,而不是在数据帧本身上运行。
Pandas的the documentation中介绍了此修复程序,并且在对其进行更改时通常需要保存数据框的副本。
使用建议的方法,这是它的工作原理:
newCols = titanic.columns.values
newCols[-1] = 'home'
titanic.columns = newCols
首先保存,编辑名称的副本,然后直接将其分配给列。