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)\Anaconda2\lib\site-packages\numpy\core\numeric.py 下引入的
那個umath其實是 C:\Program Files (x86)\Anaconda2\Lib\site-packages\numpy\core\umath.pyd
pyd 傳說中的擴展包,numpy底層是C寫的。。。