0.摘要
在Python中,尤其是数组当中,对于一些异常值往往需要进行特殊处理。为了防止异常值与正常数据混淆,影响最终计算结果,常用的方法是将异常值置零或者置空。置零的方法较为简单,本文主要介绍如果对python中的数据进行置空。
1.赋值为None
对于一般数据,可以直接为其赋值为None。
i = 1 i = None # int 型html" target="_blank">数据置空 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就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。
本文向大家介绍javascript实现连续赋值,包括了javascript实现连续赋值的使用技巧和注意事项,需要的朋友参考一下 最近项目接触,时间比较充足,到网上逛逛了逛无意中在网上发现了这个问题,预知的结果和真实结果相差太大。 请看下面代码 如果把代码拆开来看,结果就是我们所想的那样 分析代码: a.x=a={n:2} js的赋值运算是右结合的,上面等同于a.x=(a={n:2}) js的求值运
这是可能的吗,以及如何使用这样的逻辑进行一行(或短)var赋值: 我试图做到: 但得到一个错误:“运算符|未在字符串上定义”。 所以我来自JS,并试图实现: 但要“走” 由于它是静态类型的Lang,我的意思是如果b == " "(空字符串)
很多从 Java、C 语言转向 Python 的程序员对 Python 中的赋值语句感到很神奇或者很困惑, Python 中赋值的特殊之处有 3 点特殊之处:出 0-127 的数字、部分字符串外都是引用赋值; 和其它支持函数式编程范式的语言一样,支持模式匹配;Python 支持连续赋值。 模式匹配 支持函数式编程范式的语言通常也支持模式匹配,例如在 Erlang 中我可以这样赋值: [Head |
在很多流行的编程语言里,都有解构赋值的概念,比如Perl,Python ES6中也加入了类似的赋值语句,比以前的赋值操作更灵活,更快捷 正文 数组的解构赋值很好理解,就是按照对应位置,对变量赋值: let [a, b, c] = [1, 2, 3] 相当于 let a = 1 let b = 2 let c = 3 支持数组嵌套,也支持等号两边结构不同的情况 如果变量对应不上值,这个变量就是und
主要内容:基本赋值运算符,扩展后的赋值运算符赋值运算符用来把右侧的值传递给左侧的变量(或者常量);可以直接将右侧的值交给左侧的变量,也可以进行某些运算后再交给左侧的变量,比如加减乘除、函数调用、逻辑运算等。 Python 中最基本的赋值运算符是等号 ;结合其它运算符, 还能扩展出更强大的赋值运算符。 基本赋值运算符 是 Python 中最常见、最基本的赋值运算符,用来将一个表达式的值赋给另一个变量,请看下面的例子: 连续赋值 Python
2.4. 赋值 使用赋值语句可以更新一个变量的值,最简单的赋值语句是将要被赋值的变量放在=的左边,新值的表达式放在=的右边。 x = 1 // 命名变量的赋值 *p = true // 通过指针间接赋值 person.name = "bob" // 结构体字段赋值 count[x] = count[x]