pandas中對nan空值的判斷和陷阱

2021-10-01 02:08:01 字數 1285 閱讀 4975

pandas基於numpy,所以其中的空值nan和numpy.nan是等價的。numpy中的nan並不是空物件,其實際上是numpy.float64物件,所以我們不能誤認為其是空物件,從而用bool(np.nan)去判斷是否為空值,這是不對的。

對於pandas中的空值,我們該如何判斷,並且有哪些我們容易掉進去的陷阱,即不能用怎麼樣的方式去判斷呢?

1、利用pd.isnull(),pd.isna();

2、利用np.isnan();

3、利用is表示式;

4、利用in表示式。

1、不可直接用==表示式判斷;

2、不可直接用bool表示式判斷;

3、不可直接用if語句判斷。

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判斷。

比較奇怪的一點是pandas中空值的判斷可以用is表示式判斷,但是不能用==表示式判斷。我們知道,對於is表示式,如果返回true,表示這兩個引用指向的是同乙個記憶體物件,即記憶體位址是一樣的,一般同乙個物件的不同引用的值也應該是相等的,所以一般is表示式為true,那麼==表示式也為true。但是對於numpy.nan物件顯然不是這樣的,因為其可以用is表示式判斷,即當is表示式為true時,但==表示式為false,這說明雖然不同numpy.nan變數引用指向的是同乙個記憶體位址,但是其具有自己的值屬性,值是不一樣的,所以不能用==來判斷,這點需要注意。

Pandas中NaN缺失值處理

三 小結 讀取電影資料 pandas刪除缺失值,使用dropna的前提是,缺失值的型別必須是np.nan 不修改原資料 movie.dropna 可以定義新的變數接受或者用原來的變數名 data movie.dropna 替換存在缺失值的樣本的兩列 替換填充平均值,中位數 movie revenue...

對pandas資料判斷是否為NaN值的方法詳解

實際專案中有這樣的需求,將某一列的值,對映成類www.cppcns.com別型的資料,這個時候,需要我們將範圍等頻切分,或者等距切分。具體的做法可以先看某一些特徵的具體分布情況,然後我們選擇合適的閾值進行分割。def age map x if x 26 return 0程式設計客棧 elif x 2...

pandas中關於nan的處理

在pandas中有個另類的存在就是nan,解釋是 not a number,不是乙個數字,但是它的型別確是乙個float型別。numpy中也存在關於nan的方法,如 np.nan 對於pandas中nan的處理,簡單的說有以下幾個方法。檢視是否是nan,s1.isnull 和 s1.notnull ...