【问题标题】:filtering pandas .isnull().any() output [duplicate]过滤 pandas .isnull().any() 输出[重复]
【发布时间】:2020-04-23 12:09:17
【问题描述】:

(这个问题可能可以概括为过滤任何 Boolean Pandas 系列,但我找不到关于该主题的任何内容都解决了我的问题。)

鉴于此数据框:

df = pd.DataFrame({'a': (1, None, 3), 'b': (4, 5, 6), 'c': (7, 8, None), 'd': (10, 11, 12)})
df
     a  b    c   d
0  1.0  4  7.0  10
1  NaN  5  8.0  11
2  3.0  6  NaN  12

我需要获取其中包含 NaN 值的 列名 列表(我的真实数据集有 80 多列,出于清理目的,我暂时只想关注任何包含 NaN 的内容)。这会给我一个完整的布尔列表:

df.isnull().any()
a     True
b    False
c     True
d    False
dtype: bool

理想情况下我只想要:

a     True
c     True

我不知道该怎么做。掩码已关闭,但已应用于该行:

mask = df.isnull().values
df[mask]
     a  b    c   d
1  NaN  5  8.0  11
2  3.0  6  NaN  12

有没有办法将它们应用于列轴,或者有更好的方法来做我正在寻找的东西?

【问题讨论】:

  • 就像骗子说的那样,df.isna().any().loc[lambda x: x] 是您特定输出的最短路径
  • 尝试从您想要的 POV 制定问题(“我想找到具有...的列”),而不是您正在尝试的这样做是行不通的。只是一个提示。干杯

标签: python pandas


【解决方案1】:

您可以使用掩码对列执行索引:

>>> df.columns[df.isnull().any()]
Index(['a', 'c'], dtype='object')

或者,如果您想显示给定列的数据:

>>> df[df.columns[df.isnull().any()]]
     a    c
0  1.0  7.0
1  NaN  8.0
2  3.0  NaN

【讨论】:

  • 我没有意识到你可以像那样索引 .columns,但我知道我必须遗漏一些简单的东西。很高兴知道未来。
猜你喜欢
  • 2019-09-13
  • 2018-03-21
  • 1970-01-01
  • 2012-05-13
  • 1970-01-01
  • 2018-02-02
  • 2018-01-29
  • 2021-12-27
  • 2019-11-08
相关资源
最近更新 更多