在名称已更改的列中查找唯一值时发生Pandas错误

时间:2015-11-24 22:15:20

标签: python pandas

我正在研究泰坦尼克号的生存数据集。在我读取数据后,我更改了一个列名,然后尝试使用它。但是,更改的列名称会反映在列名称中,但不能用于特定目的,如下所示。

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'

1 个答案:

答案 0 :(得分:1)

这是一个链式分配问题。将值分配给列列表时,它将在数据帧的副本上运行,而不是在数据帧本身上运行。

Pandas的the documentation中介绍了此修复程序,并且在对其进行更改时通常需要保存数据框的副本。

使用建议的方法,这是它的工作原理:

newCols = titanic.columns.values
newCols[-1] = 'home'
titanic.columns = newCols

首先保存,编辑名称的副本,然后直接将其分配给列。