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就是小编分享给大家的全部内容了,希望能给大家一个参考。