在 pandas 中,如何选择包含 NaN 的行? [复制]

Posted

技术标签:

【中文标题】在 pandas 中,如何选择包含 NaN 的行? [复制]【英文标题】:In pandas, How to select the rows that contains NaN? [duplicate] 【发布时间】:2017-01-22 12:40:47 【问题描述】:

假设我在df 中有以下数据框:

a     | b     | c
------+-------+-------
5     | 2     | 4
NaN   | 6     | 8
5     | 9     | 0
3     | 7     | 1

如果我执行df.loc[df['a'] == 5],它会正确返回第一行和第三行,但如果我执行df.loc[df['a'] == np.NaN],它不会返回任何内容。

我认为这更像是一个 python 的东西而不是 pandas 的东西。如果我将np.nan 与任何东西进行比较,即使np.nan == np.nan 也会评估为False,所以问题是,我应该如何测试np.nan

【问题讨论】:

目标稍微复杂一些,但基本上你使用df['a'].isnull()pd.isnull(df['a']) 进行空值检查。之后选择很容易:df[df['a'].isnull()] 您可以使用 numpy.isnan() 为您提供与输入数组形状相同的布尔数组 一般来说,我会避免在 DataFrames 上使用np.isnan。它不如具有相同功能的pd.isnull 强大。例如,比较当您尝试np.isnan(df['a'])pd.isnull(df['a']) 时发生df = pd.DataFrame('a': ['x', np.nan, 'y']) 时发生的情况。 谢谢大家,我同时使用了ìsnull()isnan() 并得到了我想要的相同结果。为什么您没有将答案发布为答案? 本教程可能会有所帮助:chartio.com/resources/tutorials/… 【参考方案1】:

尝试像这样使用 isnull:

    import pandas as pd
    import numpy as np

    a=[1,2,3,np.nan,5,6,7]
    df = pd.DataFrame(a)

    df[df[0].isnull()]

【讨论】:

以上是关于在 pandas 中,如何选择包含 NaN 的行? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在 pandas 数据框中显示具有一个或多个 NaN 值的行

选择至少一列为 NaN 的数据框的行 [重复]

Pandas 中具有 NaN 值的子集列

如何在pandas中将多个相同类别的行组合成一个?

Pandas - 根据子集中的数据类型选择列

Pandas dropna - 存储删除的行