2016-09-14 2162 views
1

假设我有以下数据帧中df在pandas中,如何选择包含NaN的行?

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]它没有返回值。

我认为这是一个比熊猫更蟒蛇的东西。如果我将np.nan与任何东西比较,即使np.nan == np.nan将评估为False,所以问题是,我应该如何测试np.nan

+3

目标是有点复杂,但基本上你做的空用'DF [ '一']检查ISNULL()'或'pd.isnull(DF。 [ '一'])'。然后选择很容易:'df [df ['a']。isnull()]' – ayhan

+1

你可以使用numpy.isnan(),它给你一个与输入数组相同形状的布尔数组。 – dnalow

+2

一般来说,我会避免在DataFrame上使用'np.isnan'。它不像'pd.isnull'那样健壮,它具有相同的功能。例如,比较当df = pd.DataFrame({'a':[]')时尝试使用'np.isnan(df ['a'])'与'pd.isnull(df ['a']) 'x',np.nan,'y']})'。 – root

回答

3

尝试使用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()]