pandas基於numpy,所以其中的空值nan和numpy.nan是等價的。
numpy中的nan並不是空對象,其實際上是numpy.float64對象,所以我們不能誤認爲其是空對象,從而用bool(np.nan)去判斷是否爲空值,這是不對的。
對於pandas中的空值,我們該如何判斷,並且有哪些我們容易掉進去的陷阱,即不能用怎麼樣的方式去判斷呢?
可以判斷pandas中單個空值對象的方式:
1、利用pd.isnull(),pd.isna();
2、利用np.isnan();
3、利用is表達式;
4、利用in表達式。
不可以用來判斷pandas單個空值對象的方式:
1、不可直接用==表達式判斷;
2、不可直接用bool表達式判斷;
3、不可直接用if語句判斷。
對於同時多個空值對象的判斷和處理:
1、可以用Series對象和DataFrame對象的any()或all()方法;
2、可以用numpy的any()或all()方法;
3、不可以直接用python的內置函數any()和all()方法;
4、可以用Series或DataFrame對象的dropna()方法剔除空值;
5、可以用Series或DataFrame對象的fillna()方法填充空值。
示例:
import pandas as pd
import numpy as np
na=np.nan
# 可以用來判斷空值的方式
pd.isnull(na) # True
pd.isna(na) # True
np.isnan(na) # True
na is np.nan # True
na in [np.nan] # True
# 不可以直接用來判斷的方式,即以下結果和我們預期不一樣
na == np.nan # False
bool(na) # True
if na:
print('na is not null') # Output: na is not null
# 不可以直接用python內置函數any和all
any([na]) # True
all([na]) #True
總結
- numpy.nan是一個numpy.float64的非空對象,所以不能直接用bool表達式去判斷,故一切依賴於布爾表達式的判斷方式都不行,比如if語句。
- 對於pandas中空值的判斷,我們只能通過pandas或者numpy的函數和is表達式去判斷,不能用python的內置函數any或all判斷。