【问题标题】:Pandas best way to subset a dataframe inplace, using a maskPandas 使用掩码对数据帧进行子集化的最佳方法
【发布时间】:2015-10-13 13:29:05
【问题描述】:

我有一个要缩小的 pandas 数据集(删除 x 下的所有值)。

掩码是df[my_column] > 50

我通常只使用df = df[mask],但希望避免每次都复制,特别是因为它在函数中使用时容易出错(因为它只会在函数范围内改变)。

就地对数据集进行子集化的最佳方法是什么?

我正在考虑类似
df.drop(df.loc[mask].index, inplace = True)

有没有更好的方法来做到这一点,或者在任何情况下这根本不起作用?

【问题讨论】:

  • 你的意思是view = df.loc[df[my_column] > 50]
  • 我总是对 pandas 中的视图和复制内容感到困惑。本质上,我想给它一个下降的条件,然后就地下降。 df.loc[mask].index 会让 me 索引下降,对吗?
  • 抱歉df = df[mask] 有什么问题?这最终会恢复被删除行的内存吗?
  • 好吧mask本身就是一个布尔索引
  • 更容易出错,并且在函数中使用时会生成“本地”副本,然后必须返回。我想在原地做一些改动,而不仅仅是为了记忆。 df.drop(df.loc[mask].index, inplace = True) 似乎可行,但我希望可能有更好的解决方案(因为我的可能会在多级索引等上失败)

标签: pandas subset mask masking


【解决方案1】:

您缺少就地参数:

df.drop(df[df.my_column < 50].index, inplace = True)

【讨论】:

    【解决方案2】:

    你可以使用df.query()

    喜欢:

    bool_series = df[my_column] > 50
    df.query("@bool_series",inplace=True)
    

    【讨论】:

      【解决方案3】:

      我认为这行得通。也许有更好的方法?

      df = df.drop(df[df.my_column < 50].index)

      【讨论】:

      猜你喜欢
      • 2018-06-30
      • 2017-07-31
      • 1970-01-01
      • 2020-09-18
      • 1970-01-01
      • 1970-01-01
      • 2017-11-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多