【问题标题】:Filter columns of only zeros from a Pandas data frame从 Pandas 数据框中过滤仅为零的列
【发布时间】:2021-02-11 23:26:27
【问题描述】:

我有一个 Pandas 数据框,我想在其中过滤掉所有仅包含零的列。例如,在下面的数据框中,我想删除第 2 列:

        0      1      2      3      4
0   0.381  0.794  0.000  0.964  0.304
1   0.538  0.029  0.000  0.327  0.928
2   0.041  0.312  0.000  0.208  0.284
3   0.406  0.786  0.000  0.334  0.118
4   0.511  0.166  0.000  0.181  0.980

我该怎么做?我一直在尝试这样的事情:

df.filter(lambda x: x == 0)

【问题讨论】:

  • 我相信这是here 的回答。希望这会有所帮助!

标签: python pandas


【解决方案1】:

以下内容对我有用。它给出了一个序列,其中列名现在是索引,索引的值是 True/False,具体取决于列中的所有项目是否为 0。

import pandas, numpy as np
# Create DataFrame "df" like yours...

df.apply(lambda x: np.all(x == 0))

如果你想实际过滤掉 0 值:

df[df.columns[(df != 0).any()]]

【讨论】:

  • 我会改写df[df.columns[(df != 0).any()]] [不得不修正一个错字]。无论如何,它看起来像是在 0.8.1 中工作。
  • 内部语法(df!=0).any() 不起作用。 DataFrame 对象没有any 函数,至少在 0.7.3 中没有。您必须使用 mapapply 或其他东西将其映射到列。
  • 我什至在网站上都找不到 0.7.3 来检查,但我相信你是对的。 pandas 是我喜欢更新的软件包之一,因为它发展迅速。
  • 感谢您的帮助。我使用的是 0.8.1,所以@DSM 的解决方案也可以。
  • 很高兴听到它在 0.8.1 中有效。我认为我的小组很快就会升级(但是对于作为 Pandas 代码主要消费者的大型小组来说升级是困难的)。是否有任何关于 Pandas 看到未来特定功能走向的路线图文档?对于一个开源库来说,它的文档相当完善,但我担心如果他们不断改变事情而不承认它们曾经是旧版本中的错误,人们就不会跟上。我有很多 hacky 变通代码,我认为 0.8.1 已经过时了。这很不愉快。
猜你喜欢
  • 2017-11-03
  • 1970-01-01
  • 2018-06-07
  • 2017-04-14
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 2019-03-17
  • 2023-01-17
相关资源
最近更新 更多