检查pandas中的'NaN'值时排除'None'

时间:2017-02-01 07:44:13

标签: python pandas numpy nan

我正在清理NaN的数据集以对其进行线性回归,在此过程中,我用NaN替换了一些None。 执行此操作后,我使用以下代码检查具有NaN值的剩余列,其中houseprice是数据框的名称

def cols_NaN():
    return houseprice.columns[houseprice.isnull().any()].tolist()
print houseprice[cols_NaN()].isnull().sum()

问题是上述结果也包括None值。我想选择那些具有NaN值的列。我怎么能这样做?

2 个答案:

答案 0 :(得分:6)

我唯一能想到的就是检查元素是否为name='date',因为float的类型为np.nan且为空。

考虑数据框float

df

然后我们测试df = pd.DataFrame(dict(A=[1., None, np.nan]), dtype=np.object) print(df) A 0 1 1 None 2 NaN float

isnull

答案 1 :(得分:3)

对于使用列名称,它有点不同,因为需要mappandas.isnull

对于houseprice.columns.apply()以及如果houseprice.columns.isnull()出错:

  

AttributeError:'Index'对象没有属性'apply'

     

AttributeError:'Index'对象没有属性'isnull'

houseprice = pd.DataFrame(columns = [np.nan, None, 'a'])

print (houseprice)
Empty DataFrame
Columns: [nan, None, a]

print (houseprice.columns[(houseprice.columns.map(type) == float) & 
                          (pd.isnull(houseprice.columns))].tolist())
[nan]

要检查DataFrame中的所有值是否必要applymap

houseprice = pd.DataFrame({'A':[1,2,3],
                   'B':[4,5,6],
                   'C':[np.nan,8,9],
                   'D':[1,3,5],
                   'E':['a','s',None],
                   'F':[np.nan,4,3]})

print (houseprice)
   A  B    C  D     E    F
0  1  4  NaN  1     a  NaN
1  2  5  8.0  3     s  4.0
2  3  6  9.0  5  None  3.0

print (houseprice.columns[(houseprice.applymap(lambda x: isinstance(x, float)) & 
                           houseprice.isnull()).any()])
Index(['C', 'F'], dtype='object')

总而言之,此代码更简单 - True中的sum boolean mask值:

print ((houseprice.applymap(lambda x: isinstance(x, float)) & 
        houseprice.isnull()).any().sum())
2