【问题标题】:Calculating number of entries in pandas dataframe below 0计算熊猫数据框中低于0的条目数
【发布时间】:2020-03-12 10:37:16
【问题描述】:

我有一个 pandas 数据框,其中包含许多列,其中一些是数字的,而另一些是分类的。

我想计算 pandas 数据框中的否定条目数。一种方法是找出哪些列是数字的,对这些列进行子集化,然后使用简单的语法来计算具有负值的条目数,例如(df < 0).sum()

相反,我尝试使用包含条件的 apply 和 lambda 函数的语法,但我收到一条消息,指出我的语法错误。您能否向我解释一下为什么以及如何实现这个想法?

data.apply(lambda x: (if (x.dtype == 'int16' or x.dtype == 'float16'): (x<0).sum())).sum()
  File "<ipython-input-75-f329bf4e8cdd>", line 1
    data.apply(lambda x: (if (x.dtype == 'int16' or x.dtype == 'float16'): (x<0).sum())).sum()
                           ^
SyntaxError: invalid syntax

【问题讨论】:

    标签: python-3.x pandas if-statement lambda apply


    【解决方案1】:

    您可以在此处使用 三元运算符

    data.apply(lambda x: <b>(x &lt; 0).sum() if (x.dtype in ('int16', 'float16')) else 0</b>).sum()

    因此,对于非数值,我们返回 0((ℕ, +, 0) 幺半群的中性元素)。

    请注意,除了int16float16 之外,还有更多的数字类型,您可能希望在此处使用np.issubdtype(..., np.number)

    import numpy as np
    
    data.apply(lambda x: (x < 0).sum() if np.issubdtype(x.dtype, np.number) else 0).sum()

    【讨论】:

      【解决方案2】:

      我认为,一个更简单的解决方案是:

      • 使用select_dtypes 获取数字类型列的子集,
      • 然后使用 Numpy count_nonzero 函数。

      由于这个函数计算非零值,我们必须转换出 DataFrame 放入一个 boolean 值数组,其中 True 值被计为非零值。

      所以总结一下,整个代码可以是:

      np.count_nonzero(df.select_dtypes(include=np.number) < 0)
      

      【讨论】:

        猜你喜欢
        • 2023-02-20
        • 2015-01-28
        • 1970-01-01
        • 2017-08-21
        • 2022-11-14
        • 2021-07-22
        • 2013-07-06
        • 2017-07-12
        • 1970-01-01
        相关资源
        最近更新 更多