Python 實現使用空值進行賦值 None
0.摘要
在Python中,尤其是陣列當中,對於一些異常值往往需要進行特殊處理。為了防止異常值與正常資料混淆,影響最終計算結果,常用的方法是將異常值置零或者置空。置零的方法較為簡單,本文主要介紹如果對python中的資料進行置空。
1.賦值為None
對於一般資料,可以直接為其賦值為None。
i = 1 i = None # int 型資料置空 s = "string" s = None # 字串型資料置空 l = [1,2,3,4] l[2] = None # 列表中元素置空 print(i,s,l)
2.numpy型別
numpy 中的資料較為特殊,如果將一個int 型元素賦值為None,或者np.nan都會產生報錯:
a = np.arange(10)
a[2] = None
a = np.arange(10)
a[2] = np.nan
如果列印np.nan的型別,會發現np.nan是float型別的。
>>> type(np.nan)
<class 'float'>
在numpy陣列中,將int型元素賦值為float型別,是不合法的。賦值語句不會報錯,但numpy會自動將float型別轉為int型。
而列印None型別,會發現None沒有型別。
>>> type(None)
<class 'NoneType'>
賦值報錯的原因,個人認為是:numpy判斷型別不符,但也無法完成型別轉換,所以產生了報錯。
在numpy中,如果想將某一元素賦值為None或者這np.nan,可以先將陣列轉換為float型別。
a = np.arange(10,dtype=float) a[2] = np.nan a[3] = None print(a)
從最終結果上看,不論是np.nan,還是None,在numpy中都以nan的形式出現。
補充知識:Python 型別判斷 變數存在判斷 None與空字串 is和==區別 nan inf判斷
一、型別變數
type
#判斷是否為整數 type(varObj) is types.IntType StringType FloatType DictType TupleType ListType BooleanType
isinstance
isinstance(aaa,str)
type與isinstance區別
class A: pass class B(A): pass isinstance(A(),A) # returns True type(A()) == A # returns True isinstance(B(),A) # returns True type(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裡呼叫才會捕獲異常,所以採用字串引數。
名稱空間
'varname' in locals().keys()
'varname' in dir()
dir()不帶引數時,返回當前範圍內的變數、方法和定義的型別列表;帶引數時,返回引數的屬性、方法列表。如果引數包含方法dir(),該方法將被呼叫。如果引數不包含dir(),該方法將最大限度地收集引數資訊。
三、None與空字串
有句話說的Python中萬物皆為物件。None也是物件。這就好理解None與空字串NULL區別:
type(None) <class 'NoneType'> type('') <class ''str'> >>> None == 0 //(int) False >>> None == ' ' //(str) False >>> None == False //(boolean) False
四、is和==區別
is判斷的是a物件是否就是b物件,是通過id來判斷的。
==判斷的是a物件的值是否和b物件的值相等,是通過value來判斷的。
>>> d = {"a":1} >>> dd = d.copy() >>> d is dd False >>> d == dd True
五、nan inf
記憶:對於is判斷,符合is的物件比較定義:物件is物件本身,物件不is新建物件。對於==判斷,除了nan,符合==的值比較的定義。對於nan在用==值比較時,可以認為,nan物件的值不==該nan物件的值,nan物件的值不==新建nan物件的值。
>>> inf = float("inf") >>> ninf = float("-inf") >>> nan = float("nan") >>> inf is inf True >>> ninf is ninf True >>> nan is nan True >>> inf == inf True >>> ninf == ninf True >>> nan == nan // nan物件時本身物件nan False >>> 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 實現使用空值進行賦值 None就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。