微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Pandas数据帧(python)中查找哪些列包含任何NaN值

给定一个包含可能的NaN值的pandas数据帧,这些值分散在这里和那里:

问题:如何确定哪些列包含NaN值?特别是,我可以获得包含NaN的列名列表吗?

解决方法:

更新:使用Pandas 0.22.0

较新的Pandas版本有新方法‘DataFrame.isna()’‘DataFrame.notna()’

@H_502_12@In [71]: df Out[71]: a b c 0 NaN 7.0 0 1 0.0 NaN 4 2 2.0 NaN 4 3 1.0 7.0 0 4 1.0 3.0 9 5 7.0 4.0 9 6 2.0 6.0 9 7 9.0 6.0 4 8 3.0 0.0 9 9 9.0 0.0 1 In [72]: df.isna().any() Out[72]: a True b True c False dtype: bool

作为列的列表:

@H_502_12@In [74]: df.columns[df.isna().any()].tolist() Out[74]: ['a', 'b']

选择那些列(包含至少一个NaN值):

@H_502_12@In [73]: df.loc[:, df.isna().any()] Out[73]: a b 0 NaN 7.0 1 0.0 NaN 2 2.0 NaN 3 1.0 7.0 4 1.0 3.0 5 7.0 4.0 6 2.0 6.0 7 9.0 6.0 8 3.0 0.0 9 9.0 0.0

老答案:

尝试使用isnull()

@H_502_12@In [97]: df Out[97]: a b c 0 NaN 7.0 0 1 0.0 NaN 4 2 2.0 NaN 4 3 1.0 7.0 0 4 1.0 3.0 9 5 7.0 4.0 9 6 2.0 6.0 9 7 9.0 6.0 4 8 3.0 0.0 9 9 9.0 0.0 1 In [98]: pd.isnull(df).sum() > 0 Out[98]: a True b True c False dtype: bool

或者@root提出更清晰的版本:

@H_502_12@In [5]: df.isnull().any() Out[5]: a True b True c False dtype: bool In [7]: df.columns[df.isnull().any()].tolist() Out[7]: ['a', 'b']

选择一个子集 – 包含至少一个NaN值的所有列:

@H_502_12@In [31]: df.loc[:, df.isnull().any()] Out[31]: a b 0 NaN 7.0 1 0.0 NaN 2 2.0 NaN 3 1.0 7.0 4 1.0 3.0 5 7.0 4.0 6 2.0 6.0 7 9.0 6.0 8 3.0 0.0 9 9.0 0.0

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐