Python 實現(xiàn)使用空值進行賦值 None
0.摘要
在Python中,尤其是數(shù)組當中,對于一些異常值往往需要進行特殊處理。為了防止異常值與正常數(shù)據(jù)混淆,影響最終計算結(jié)果,常用的方法是將異常值置零或者置空。置零的方法較為簡單,本文主要介紹如果對python中的數(shù)據(jù)進行置空。
1.賦值為None
對于一般數(shù)據(jù),可以直接為其賦值為None。
i = 1i = None # int 型數(shù)據(jù)置空s = 'string's = None # 字符串型數(shù)據(jù)置空l = [1,2,3,4]l[2] = None # 列表中元素置空print(i, s, l)
2.numpy類型
numpy 中的數(shù)據(jù)較為特殊,如果將一個int 型元素賦值為None,或者np.nan都會產(chǎn)生報錯:
a = np.arange(10)a[2] = None
a = np.arange(10)a[2] = np.nan
如果打印np.nan的類型,會發(fā)現(xiàn)np.nan是float類型的。
>>> type(np.nan)<class ’float’>
在numpy數(shù)組中,將int型元素賦值為float類型,是不合法的。賦值語句不會報錯,但numpy會自動將float類型轉(zhuǎn)為int型。
而打印None類型,會發(fā)現(xiàn)None沒有類型。
>>> type(None)<class ’NoneType’>
賦值報錯的原因,個人認為是:numpy判斷類型不符,但也無法完成類型轉(zhuǎn)換,所以產(chǎn)生了報錯。
在numpy中,如果想將某一元素賦值為None或者這np.nan,可以先將數(shù)組轉(zhuǎn)換為float類型。
a = np.arange(10, dtype=float)a[2] = np.nana[3] = Noneprint(a)
從最終結(jié)果上看,不論是np.nan,還是None,在numpy中都以nan的形式出現(xiàn)。
補充知識:Python 類型判斷 變量存在判斷 None與空字符串 is和==區(qū)別 nan inf判斷
一、類型變量
type
#判斷是否為整數(shù)type(varObj) is types.IntType StringType FloatType DictType TupleType ListType BooleanType
isinstance
isinstance(aaa,str)
type與isinstance區(qū)別
class A: passclass B(A): passisinstance(A(), A) # returns Truetype(A()) == A # returns Trueisinstance(B(), A) # returns Truetype(B()) == A # returns False
二、變量存在
異常捕獲
try: print self.fileReadOpen except Exception: pass else: del self.fileReadOpen
def isset(v): try : type (eval(v)) except : return 0 else : return 1
isset(’varname’) //變量只能在try里調(diào)用才會捕獲異常,所以采用字符串參數(shù)。
命名空間
’varname’ in locals().keys()’varname’ in dir()
dir()不帶參數(shù)時,返回當前范圍內(nèi)的變量、方法和定義的類型列表;帶參數(shù)時,返回參數(shù)的屬性、方法列表。如果參數(shù)包含方法dir(),該方法將被調(diào)用。如果參數(shù)不包含dir(),該方法將最大限度地收集參數(shù)信息。
三、None與空字符串
有句話說的Python中萬物皆為對象。None也是對象。這就好理解None與空字符串NULL區(qū)別:
type(None)<class ’NoneType’>type(’’)<class ’’str’>>>> None == 0 //(int)False>>> None == ’ ’ //(str)False>>> None == False //(boolean)False
四、is和==區(qū)別
is判斷的是a對象是否就是b對象,是通過id來判斷的。
==判斷的是a對象的值是否和b對象的值相等,是通過value來判斷的。
>>> d = {'a':1}>>> dd = d.copy()>>> d is ddFalse>>> d == ddTrue
五、nan inf
記憶:對于is判斷,符合is的對象比較定義:對象is對象本身,對象不is新建對象。對于==判斷,除了nan,符合==的值比較的定義。對于nan在用==值比較時,可以認為,nan對象的值不==該nan對象的值,nan對象的值不==新建nan對象的值。
>>> inf = float('inf')>>> ninf = float('-inf')>>> nan = float('nan')>>> inf is infTrue>>> ninf is ninfTrue>>> nan is nanTrue>>> inf == infTrue>>> ninf == ninfTrue>>> nan == nan // nan對象時本身對象nanFalse>>> inf is float('inf')False>>> ninf is float('-inf')False>>> nan is float('nan')False>>> inf == float('inf')True>>> ninf == float('-inf')True>>> nan == float('nan') //前一個nan值不等于新建對象float('nan')的值False
判斷nan方法:
使用math模塊:
>>> import math>>> math.isinf(inf)True>>> math.isinf(ninf)True>>> math.isnan(nan)True>>> math.isinf(float('inf'))True>>> math.isinf(float('-inf'))True>>> math.isnan(float('nan'))True
利用自身判斷:
>>> def isnan(num): return num != num>>> isnan(float('nan'))True
使用numpy:
>>> import numpy as np>>> >>> np.isnan(np.nan)True>>> np.isnan(float('nan'))True>>> np.isnan(float('inf'))False
以上這篇Python 實現(xiàn)使用空值進行賦值 None就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. Python 實現(xiàn)勞拉游戲的實例代碼(四連環(huán)、重力四子棋)2. python 寫函數(shù)在一定條件下需要調(diào)用自身時的寫法說明3. Java GZip 基于內(nèi)存實現(xiàn)壓縮和解壓的方法4. jsp+servlet簡單實現(xiàn)上傳文件功能(保存目錄改進)5. JavaScript數(shù)據(jù)結(jié)構(gòu)之雙向鏈表6. 利用CSS制作3D動畫7. 一款功能強大的markdown編輯器tui.editor使用示例詳解8. 存儲于xml中需要的HTML轉(zhuǎn)義代碼9. SpringBoot+TestNG單元測試的實現(xiàn)10. .Net加密神器Eazfuscator.NET?2023.2?最新版使用教程
