gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 06:22:48 24 4
gpt4 key购买 nike

我正在做第一个 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 中的工作原理?

<小时/>

编辑:

@kaya3 pandas.Series.map 的情况并非如此。

for dataset in combine:  
dataset['Name'] = dataset['Name'].map(name_map)
dataset['Name'] = dataset['Name'].fillna(0)

此代码更改了组合中的原始数据帧。文档说它返回系列(而不是 None)。如何判断函数是否会改变值?

最佳答案

当您处于循环中时,dataset 是组合中 DataFrame 的副本,因此当您更改 dataset 时,您不会更改 中的实际 DataFrame合并,只是副本。要更改列表中的实际 DataFrame,请尝试以下操作:

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

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

关于python - 变量仅在 for 循环内本地分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60287723/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com