pandas中對nan空值的判斷

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

總結

  1. numpy.nan是一個numpy.float64的非空對象,所以不能直接用bool表達式去判斷,故一切依賴於布爾表達式的判斷方式都不行,比如if語句。
  2. 對於pandas中空值的判斷,我們只能通過pandas或者numpy的函數和is表達式去判斷,不能用python的內置函數any或all判斷。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章