【发布时间】: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 制定问题(“我想找到具有...的列”),而不是您正在尝试的这样做是行不通的。只是一个提示。干杯