溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Python如何實(shí)現(xiàn)使用空值進(jìn)行賦值None

發(fā)布時(shí)間:2021-04-26 10:23:03 來(lái)源:億速云 閱讀:401 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹Python如何實(shí)現(xiàn)使用空值進(jìn)行賦值None,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

python可以做什么

Python是一種編程語(yǔ)言,內(nèi)置了許多有效的工具,Python幾乎無(wú)所不能,該語(yǔ)言通俗易懂、容易入門(mén)、功能強(qiáng)大,在許多領(lǐng)域中都有廣泛的應(yīng)用,例如最熱門(mén)的大數(shù)據(jù)分析,人工智能,Web開(kāi)發(fā)等。

0.摘要

在Python中,尤其是數(shù)組當(dāng)中,對(duì)于一些異常值往往需要進(jìn)行特殊處理。為了防止異常值與正常數(shù)據(jù)混淆,影響最終計(jì)算結(jié)果,常用的方法是將異常值置零或者置空。置零的方法較為簡(jiǎn)單,本文主要介紹如果對(duì)python中的數(shù)據(jù)進(jìn)行置空。

1.賦值為None

對(duì)于一般數(shù)據(jù),可以直接為其賦值為None。

i = 1
i = None    # int 型數(shù)據(jù)置空
s = "string"
s = None    # 字符串型數(shù)據(jù)置空
l = [1,2,3,4]
l[2] = None   # 列表中元素置空
print(i, s, l)

Python如何實(shí)現(xiàn)使用空值進(jìn)行賦值None

2.numpy類(lèi)型

numpy 中的數(shù)據(jù)較為特殊,如果將一個(gè)int 型元素賦值為None,或者np.nan都會(huì)產(chǎn)生報(bào)錯(cuò):

a = np.arange(10)
a[2] = None

Python如何實(shí)現(xiàn)使用空值進(jìn)行賦值None

a = np.arange(10)
a[2] = np.nan

Python如何實(shí)現(xiàn)使用空值進(jìn)行賦值None

如果打印np.nan的類(lèi)型,會(huì)發(fā)現(xiàn)np.nan是float類(lèi)型的。

>>> type(np.nan)
<class 'float'>

在numpy數(shù)組中,將int型元素賦值為float類(lèi)型,是不合法的。賦值語(yǔ)句不會(huì)報(bào)錯(cuò),但numpy會(huì)自動(dòng)將float類(lèi)型轉(zhuǎn)為int型。

而打印None類(lèi)型,會(huì)發(fā)現(xiàn)None沒(méi)有類(lèi)型。

>>> type(None)
<class 'NoneType'>

賦值報(bào)錯(cuò)的原因,個(gè)人認(rèn)為是:numpy判斷類(lèi)型不符,但也無(wú)法完成類(lèi)型轉(zhuǎn)換,所以產(chǎn)生了報(bào)錯(cuò)。

在numpy中,如果想將某一元素賦值為None或者這np.nan,可以先將數(shù)組轉(zhuǎn)換為float類(lèi)型。

a = np.arange(10, dtype=float)
a[2] = np.nan
a[3] = None
print(a)

Python如何實(shí)現(xiàn)使用空值進(jìn)行賦值None

從最終結(jié)果上看,不論是np.nan,還是None,在numpy中都以nan的形式出現(xiàn)。

補(bǔ)充知識(shí):Python 類(lèi)型判斷 變量存在判斷 None與空字符串 is和==區(qū)別 nan inf判斷

一、類(lèi)型變量

type

#判斷是否為整數(shù)
type(varObj) is types.IntType 

 StringType 
 FloatType 
 DictType 
 TupleType 
 ListType 
 BooleanType

isinstance

isinstance(aaa,str)

type與isinstance區(qū)別

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里調(diào)用才會(huì)捕獲異常,所以采用字符串參數(shù)。

命名空間

'varname' in locals().keys()
'varname' in dir()

dir()不帶參數(shù)時(shí),返回當(dāng)前范圍內(nèi)的變量、方法和定義的類(lèi)型列表;帶參數(shù)時(shí),返回參數(shù)的屬性、方法列表。如果參數(shù)包含方法dir(),該方法將被調(diào)用。如果參數(shù)不包含dir(),該方法將最大限度地收集參數(shù)信息。

三、None與空字符串

有句話(huà)說(shuō)的Python中萬(wàn)物皆為對(duì)象。None也是對(duì)象。這就好理解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對(duì)象是否就是b對(duì)象,是通過(guò)id來(lái)判斷的。

==判斷的是a對(duì)象的值是否和b對(duì)象的值相等,是通過(guò)value來(lái)判斷的。

>>> d = {"a":1}
>>> dd = d.copy()
>>> d is dd
False
>>> d == dd
True

五、nan inf

記憶:對(duì)于is判斷,符合is的對(duì)象比較定義:對(duì)象is對(duì)象本身,對(duì)象不is新建對(duì)象。對(duì)于==判斷,除了nan,符合==的值比較的定義。對(duì)于nan在用==值比較時(shí),可以認(rèn)為,nan對(duì)象的值不==該nan對(duì)象的值,nan對(duì)象的值不==新建nan對(duì)象的值。

>>> 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對(duì)象時(shí)本身對(duì)象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")  //前一個(gè)nan值不等于新建對(duì)象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如何實(shí)現(xiàn)使用空值進(jìn)行賦值None”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI