pandas中DataFrame,Series 都有 isnull()方法,而数据框/单元格却没有,用了就会报错:AttributeError: 'float' object has no attribute 'isnull'
怎么判断单个框是否为 np.nan?
索引一个单元格,用 is 判断
pd.ix[60009,u'团队'] is np.nan
===========================================
Python常规的判断,==,和is, 这对None是有效的
None is None
Out[49]: True
None == None
Out[50]: True
==========================================
而对,np.nan,只能用is
da1pd.ix[6000996,u'团队'] == np.nan
Out[41]: False
da1pd.ix[6000996,u'团队'] is np.nan
Out[42]: True
np.nan == np.nan
Out[43]: False
==================================
np.nan也不是None
None == np.nan
Out[46]: False
None is np.nan
Out[48]: False
is 、== 的判断方法不同,is 判断是否为同一个对象
1 is 1
Out[51]: True
而’== ’ 是值判断,两个变量值是否相等。
u = 156
v = 156
u is v
Out[58]: True
#因为,Python,对变量赋值是用的引用,默认传的是地址,所以,赋的是同一个 对象,也会是 同一个对象
u = 156.0
u is v
Out[60]: False
u == v
Out[61]: True
# 一个赋值整数,一个赋值浮点数时就 不指向一个对象了。 只是值相等而已
#注意:当数字过大时,超过256时也是不同的对象,因为数字过大解析器并没有保存
a = 250 a is 250 Out[65]: True a = 257 a is 257 Out[67]: False a = 256 a is 256 Out[69]: True
回到开始,np.nan 应该是没有值的,所以不能值判断,只用对象引用判断,而None有空值,所以也可以值判断。
#补充之前的浅陋认识,np.nan 重载了“==” 运算符,dir(np.nan)就能看到"__eq__",翻了一下模块文件,没找到定义np.nan的源代码在哪.....
#补充+1, 这次找到了,np.nan是在C:Program Files (x86)Anaconda2libsite-packages umpycore umeric.py 下引入的
那个umath其实是 C:Program Files (x86)Anaconda2Libsite-packages umpycoreumath.pyd
pyd 传说中的扩展包,numpy底层是C写的。。。