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

时间:2018-09-09 02:38:07

标签: python pandas dataframe slice isnull

关于此主题的文章很多,但不幸的是,所提供的解决方案(使用loc)不适用于我。在我的数据集中,我具有“ GarageYrBlt”功能,这是建造车库的年份;另一个特色是“ YearBuilt”,即房屋的建造年份。 GarageYrBlt具有一些空值。

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

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

这给出了警告“试图在DataFrame的切片副本上设置一个值” 所以我尝试了如下所示的.loc方法,但是没有任何变化。我仍然遇到相同的错误。有什么建议吗?

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

1 个答案:

答案 0 :(得分:1)

您需要在单个切片操作中执行此操作。所以代替这个:

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)