处理列名时有些不同,因为需要使用 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')
对于这段代码,简化后的写法是使用sum
函数来求取boolean mask
中为True
的值的总和:
print ((houseprice.applymap(lambda x: isinstance(x, float)) &
houseprice.isnull()).any().sum())
2
isnull()
,NaN
和None
都解析为 null。你最好在另一个序列中跟踪中间替换。 - piRSquared