我正在做第一个 Kaggle 挑战,我对这种行为感到惊讶。
组合由两个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 中的工作原理?
edit:
@kaya3 情况并非如此pandas.Series.map
for dataset in combine:
dataset['Name'] = dataset['Name'].map(name_map)
dataset['Name'] = dataset['Name'].fillna(0)
此代码更改了组合中的原始数据帧。文档说它返回系列(而不是 None)。如何判断函数是否会改变值?