获取具有NaN值的所有行

时间:2014-01-18 10:07:58

标签: python numpy pandas

我有一个表格,其中包含一些NaN值:

A   B   C   D
2   3   2   Nan
3   4   5   5
2   3   1   Nan

我想获得D = NaN的所有行。我怎么能这样做?

2 个答案:

答案 0 :(得分:24)

创建用于说明的df(包含Nan)

In [86]: df =pd.DataFrame({'a':[1,2,3],'b':[3,4,5],'c':[np.nan, 4,5]})

In [87]: df
Out[87]: 
   a  b   c
0  1  3 NaN
1  2  4   4
2  3  5   5

检查列c

的哪些索引为空
In [88]: pd.isnull(df['c'])
Out[88]: 
0     True
1    False
2    False
Name: c, dtype: bool

检查列c

的哪些索引不为空
In [90]: pd.notnull(df['c'])
Out[90]: 
0    False
1     True
2     True
Name: c, dtype: bool

选择df的行,其中c不为空

In [91]: df[pd.notnull(df['c'])]
Out[91]: 
   a  b  c
1  2  4  4
2  3  5  5

选择df的行,其中c为null

In [93]: df[pd.isnull(df['c'])]
Out[93]: 
   a  b   c
0  1  3 NaN

选择df列c的行,其中c不为空

In [94]: df['c'][pd.notnull(df['c'])]
Out[94]: 
1    4
2    5
Name: c, dtype: float64

答案 1 :(得分:0)

对于不涉及大熊猫的解决方案,您可以执行以下操作:

goodind=np.where(np.sum(np.isnan(y),axis=1)==0)[0] #indices of rows non containing nans

(如果你想要带有nan的行,则为否定)并使用索引来切片数据。 我不确定sum是结合布尔值的最佳方式,但np.anynp.all似乎没有axis参数,所以这是最好的我发现的方式。