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)
在numpy数组中,将int型元素赋值为float类型,是不合法的。赋值语句不会报错,但numpy会自动将float类型转为int型。
而打印None类型,会发现None没有类型。
>>>type(None)
赋值报错的原因,个人认为是: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和==区别naninf判断
一、类型变量
type
#判断是否为整数 type(varObj)istypes.IntType StringType FloatType DictType TupleType ListType BooleanType
isinstance
isinstance(aaa,str)
type与isinstance区别
classA: pass classB(A): pass isinstance(A(),A)#returnsTrue type(A())==A#returnsTrue isinstance(B(),A)#returnsTrue type(B())==A#returnsFalse
二、变量存在
异常捕获
try: printself.fileReadOpen exceptException: pass else: delself.fileReadOpen
defisset(v): try: type(eval(v)) except: return0 else: return1
isset('varname')//变量只能在try里调用才会捕获异常,所以采用字符串参数。
命名空间
'varname'inlocals().keys()
'varname'indir()
dir()不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法dir(),该方法将被调用。如果参数不包含dir(),该方法将最大限度地收集参数信息。
三、None与空字符串
有句话说的Python中万物皆为对象。None也是对象。这就好理解None与空字符串NULL区别:
type(None)type('') >>>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() >>>disdd False >>>d==dd True
五、naninf
记忆:对于is判断,符合is的对象比较定义:对象is对象本身,对象不is新建对象。对于==判断,除了nan,符合==的值比较的定义。对于nan在用==值比较时,可以认为,nan对象的值不==该nan对象的值,nan对象的值不==新建nan对象的值。
>>>inf=float("inf") >>>ninf=float("-inf") >>>nan=float("nan") >>>infisinf True >>>ninfisninf True >>>nanisnan True >>>inf==inf True >>>ninf==ninf True >>>nan==nan//nan对象时本身对象nan False >>>infisfloat("inf") False >>>ninfisfloat("-inf") False >>>nanisfloat("nan") False >>>inf==float("inf") True >>>ninf==float("-inf") True >>>nan==float("nan")//前一个nan值不等于新建对象float("nan")的值 False
判断nan方法:
使用math模块:
>>>importmath >>>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
利用自身判断:
>>>defisnan(num): returnnum!=num >>>isnan(float("nan")) True
使用numpy:
>>>importnumpyasnp >>> >>>np.isnan(np.nan) True >>>np.isnan(float("nan")) True >>>np.isnan(float("inf")) False
以上这篇Python实现使用空值进行赋值None就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。