Python 在名称已更改的列中查找唯一值时出错

Python 在名称已更改的列中查找唯一值时出错,python,pandas,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

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

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'

这是一个链式分配问题。当您为列列表赋值时,它是在数据帧的副本上操作,而不是在数据帧本身上操作

有关修复的说明,请参见中的“熊猫”,通常在对数据帧进行更改时需要保存数据帧的副本

使用建议的方法,其工作原理如下:

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

名称的副本首先保存、编辑,然后直接指定给列

您遇到了一个链式分配问题。看:啊!我懂了。非常感谢。如果你愿意,你可以加上这个作为答案。它正在复制,而不是在原来的框架上工作。添加了一个答案,很高兴我能帮上忙!