来自 DataFrame 警告的切片副本,loc 方法不起作用

copy of a slice from a DataFrame warning, loc method not working

关于此主题的帖子很多,但不幸的是,提供的解决方案(使用 loc)对我不起作用。在我的数据集中,我有特征 'GarageYrBlt',这是车库建造的年份;另一个特征 'YearBuilt' 是房子建造的年份。 GarageYrBlt 有一些空值。

由于 GarageYrBlt 和 YearBuilt 密切相关,我试图用 YearBuilt 的相应值替换 GarageYrBlt 的空值。

df.GarageYrBlt[df.GarageYrBlt.isnull()] = df.YearBuilt[df.GarageYrBlt.isnull()]

这给出了警告 "A value is trying to be set on a copy of a slice from a DataFrame" 所以我尝试了如下所示的 .loc 方法,但没有任何变化。我仍然遇到同样的错误。有什么建议吗?

df.loc[:,"GarageYrBlt"][df.GarageYrBlt.isnull()] = df.loc[:,"YearBuilt"][df.GarageYrBlt.isnull()].copy()

您需要在单个切片操作中完成。所以不是这个:

df.loc[:,"GarageYrBlt"][df.GarageYrBlt.isnull()] = df.loc[:,"YearBuilt"][df.GarageYrBlt.isnull()].copy()

这样做:

df.loc[df.GarageYrBlt.isnull(), "GarageYrBlt"] = df.loc[df.GarageYrBlt.isnull(), "YearBuilt"]

或更简单:

df.GarageYrBlt.fillna(df.YearBuilt, inplace=True)