我正在清理NaN
的数据集以对其进行线性回归,在此过程中,我用NaN
替换了一些None
。
执行此操作后,我使用以下代码检查具有NaN
值的剩余列,其中houseprice
是数据框的名称
def cols_NaN():
return houseprice.columns[houseprice.isnull().any()].tolist()
print houseprice[cols_NaN()].isnull().sum()
问题是上述结果也包括None
值。我想选择那些具有NaN
值的列。我怎么能这样做?
答案 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)
对于使用列名称,它有点不同,因为需要map
和pandas.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