变量仅在for循环内本地分配

问题描述 投票:0回答:1

我正在进行第一个Kaggle挑战,对此行为感到震惊。

combine由两个pd.DataFrame组成,一个是训练集,另一个是测试集。我想删除两列,因此创建了一个for循环,该循环遍历合并中的项目。

for dataset in combine:
    dataset = dataset.drop(['Ticket', 'Cabin'], axis=1)
    print(dataset.columns)
for dataset in combine:
    print(dataset.columns) 

由于某种原因,赋值仅发生在本地,而执行另一个for循环则表明实际数据没有更改。输出如下。


Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp',
       'Parch', 'Fare', 'Embarked'],
      dtype='object')
Index(['PassengerId', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare',
       'Embarked'],
      dtype='object')
Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp',
       'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'],
      dtype='object')
Index(['PassengerId', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp', 'Parch',
       'Ticket', 'Fare', 'Cabin', 'Embarked'],
      dtype='object')

如您所见,在第二个for循环中,列将返回。问题出在哪里?我是否误解了for循环在Python中的工作原理?

python kaggle
1个回答
0
投票

[在循环中,dataset是合并的DataFrame的副本,因此,当您更改dataset时,您并没有更改combine中的实际DataFrame,仅是副本。要更改列表中的实际DataFrame,请尝试如下操作:

for ii in range(len(combine)):
    combine[ii] = combine[ii].drop(['Ticket', 'Cabin'], axis=1)

现在您要更改列表中的变量,而不仅仅是副本。

© www.soinside.com 2019 - 2024. All rights reserved.