【问题标题】:Pandas DataFrame - Selecting and IndexingPandas DataFrame - 选择和索引
【发布时间】:2018-04-24 15:22:33
【问题描述】:

我有这个数据框熊猫对象

df = pd.DataFrame(randn(5,4),['A','B','C','D','E'],['W','X','Y','Z'])

我执行,这是行表 A, B, C, D, EW, X, Y, Z

W, X, Y, Z 中的每一列都是 Pandas 系列,W 是 Pandas 系列,XYZ,它们都共享一个公共索引。

这基本上是一个数据框,一个共享索引的系列集。

直到这里没关系。 :)

我可以通过这种方式抓取W列大于0的所有数据值:

注意C行消失了

但我不明白以下内容:

这句话是什么意思?

df[df['W']>0][['Y','X']]

结果是这样的:

理论上,我正在抓取所有大于 0 的数据框 W 列值,并且我提前根据什么标准或条件返回 YX 列?

为什么我在YX 列上获取这些值?

目前,我正在研究 Pandas,我想知道这种行为的原因。

【问题讨论】:

  • df[df['W']>0][['Y','X']] 当W大于0时,得到Y和X的列
  • df[df['W']>0] 在应用过滤条件后返回一个数据框。然后["Y", "X"] 访问该DataFrame 的YX 列。
  • 进行此选择的“正确”或惯用方式是使用 .loc,df.loc[df['W']>0,['Y','X']]
  • @ScottBoston 使用 .loc 进行选择操作时是否与性能或内存有关?
  • @bgarcial 通常,您应该从链接选择中重新构建框架。要发现链接查找']['。 pandas.pydata.org/pandas-docs/stable/…

标签: python pandas dataframe data-science


【解决方案1】:

当你这样做时

df[df['W']>0]

返回一个新的data frame。因此,当您将[['Y', 'X']] 放在此数据框的末尾时,您基本上是在此新数据框中进行了简单的选择。将出现在XY 列中的值只是此df 的XY 的值。

更详细地说,df['W']>0 将返回一个Boolean 系列,即具有值TrueFalse 的系列。当您执行df[df['W']>0] 时,您正在使用此系列过滤您的df。输出将是df 的行,其中df['W']>0 返回True

【讨论】:

    【解决方案2】:
    1. df['W']>0 返回一个布尔系列,其中列大于零 (true) 否则为 false

    2. df[df['W']>0]df 返回所有行,其中df['W']>0true

    3. df['X'] 返回数据框的“X”列

    4. 同样,df[['X', 'Y']] 从数据框中返回列 XY

    如你所见,df[...] 的语法可以有不同的含义:

    1. 它可用于通过传递与数据帧长度相同的布尔系列来逐行屏蔽数据帧
    2. 可用于选择单列(传入字符串)或一组列(传入字符串列表)

    【讨论】:

      【解决方案3】:

      正如您在第 2 步中所解释的:

      1. 返回 Y、X 列
      df[['Y','X']]
      
      1. 返回 W > 0 的行
      df[df['W']>0]
      
      1. 第三步:返回 W > 0 的行,然后我们选择 Y、X 列
      df[df['W']>0][['Y','X']]
      

      基本上我们首先将函数 1 应用于数据帧,然后在输出上应用函数 2。因此最终的输出。

      这是函数的顺序执行。

      【讨论】:

        【解决方案4】:

        它在一个单列中执行两个独立的操作。

        1. (过滤行)df[df['W'] > 0] 仅选择 W 列为正的行
        2. (过滤列)df[['X', 'Y']] 仅选择 2 个感兴趣的列

        【讨论】:

          【解决方案5】:

          如果您将此 Python 代码与例如 excel 进行比较,您可以说:

          IF(W>0,"Value if True(return Y and X)", "Value if False ("")")
          

          【讨论】:

            猜你喜欢
            • 2014-01-01
            • 2017-11-20
            • 2019-01-26
            • 2017-06-11
            • 1970-01-01
            • 2019-04-13
            • 1970-01-01
            • 2012-08-13
            • 2015-03-24
            相关资源
            最近更新 更多