gpt4 book ai didi

Python 获取 SettingWithCopyWarning - iloc 与 loc - 无法弄清楚原因

转载 作者:行者123 更新时间:2023-11-28 20:55:37 25 4
gpt4 key购买 nike

我对 SettingWithCopyWarning 有基本的了解,但我无法弄清楚为什么我会收到针对这种特殊情况的警告。

我正在遵循 https://github.com/ageron/handson-ml/blob/master/02_end_to_end_machine_learning_project.ipynb 中的代码

当我运行如下代码(使用 .loc)时,我没有得到 SettingWithCopyWarning

但是,如果我改为使用 .iloc 运行代码,我会收到警告。

谁能帮我理解一下?

from sklearn.model_selection import StratifiedShuffleSplit

split = StratifiedShuffleSplit(n_splits=1, test_size=0.2, random_state=42)

for train_index, test_index in split.split(housing, housing["income_cat"]):
strat_train_set = housing.loc[train_index]
strat_test_set = housing.loc[test_index]

for set_ in (strat_train_set, strat_test_set):
set_.drop("income_cat", axis=1, inplace=True)

最佳答案

这里的问题不是因为索引,ilocloc 在这里对您的工作方式相同。问题出在 set_.drop("income_cat", axis=1, inplace=True) 中。 set_ 数据框与 strat_train_setstrat_test_set 之间似乎存在弱引用。

for set_ in (strat_train_set, strat_test_set):
print(set_._is_copy)

有了这个你会得到:

<weakref at 0x128b30598; to 'DataFrame' at 0x128b355c0>
<weakref at 0x128b30598; to 'DataFrame' at 0x128b355c0>

这可能会导致 SettingWithCopyWarning,因为它正在尝试转换数据框的副本并将这些更改也应用到原始数据框。

关于Python 获取 SettingWithCopyWarning - iloc 与 loc - 无法弄清楚原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56376366/

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