【问题标题】:copy of a slice from a DataFrame warning, loc method not working从 DataFrame 警告复制切片,loc 方法不起作用
【发布时间】:2019-02-13 21:22:12
【问题描述】:

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

由于 GarageYrBlt 和 YearBuilt 高度相关,我试图将 GarageYrBlt 的空值替换为 YearBuilt 的相应值。

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()

【问题讨论】:

  • 看起来我使用 loc 错误,这似乎有效: data.loc[data.GarageYrBlt.isnull(),"GarageYrBlt"] = data.loc[data.GarageYrBlt.isnull(), “年份”]
  • 你这里评论的用法是正确的,就是df.loc[row_index, column_idx]。当您在原始问题中使用df.loc[...][...] 时,第二组[] 可能是导致复制切片警告的原因。

标签: python pandas dataframe slice isnull


【解决方案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)

【讨论】:

    猜你喜欢
    • 2020-10-27
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    • 2016-06-16
    • 2019-09-03
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多