Python 实现使用空值进行赋值 None


Posted in Python onMarch 12, 2020

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)

Python 实现使用空值进行赋值 None

2.numpy类型

numpy 中的数据较为特殊,如果将一个int 型元素赋值为None,或者np.nan都会产生报错:

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

Python 实现使用空值进行赋值 None

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

Python 实现使用空值进行赋值 None

如果打印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)

Python 实现使用空值进行赋值 None

从最终结果上看,不论是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就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python抓取京东价格分析京东商品价格走势
Jan 09 Python
深入理解NumPy简明教程---数组2
Dec 17 Python
基于Python对象引用、可变性和垃圾回收详解
Aug 21 Python
python简单商城购物车实例代码
Mar 15 Python
Python文本统计功能之西游记用字统计操作示例
May 07 Python
numpy返回array中元素的index方法
Jun 27 Python
用python实现k近邻算法的示例代码
Sep 06 Python
使用pandas把某一列的字符值转换为数字的实例
Jan 29 Python
Python实现KNN(K-近邻)算法的示例代码
Mar 05 Python
Pandas-Cookbook 时间戳处理方式
Dec 07 Python
Python使用pymysql模块操作mysql增删改查实例分析
Dec 19 Python
Python使用MapReduce进行简单的销售统计
Apr 22 Python
PyCharm永久激活方式(推荐)
Sep 22 #Python
Pycharm激活码激活两种快速方式(附最新激活码和插件)
Mar 12 #Python
pycharm激活码快速激活及使用步骤
Mar 12 #Python
Python自动化测试笔试面试题精选
Mar 12 #Python
PyCharm License Activation激活码失效问题的解决方法(图文详解)
Mar 12 #Python
Python之关于类变量的两种赋值区别详解
Mar 12 #Python
浅谈python3 构造函数和析构函数
Mar 12 #Python
You might like
php缩放gif和png图透明背景变成黑色的解决方法
2014/10/14 PHP
大家都应该掌握的PHP关联数组使用技巧
2015/12/25 PHP
javascript json2 使用方法
2010/03/16 Javascript
jquery ajax学习笔记2 使用XMLHttpRequest对象的responseXML
2011/10/16 Javascript
jQuery-serialize()输出序列化form表单值的方法
2012/12/26 Javascript
js自动生成对象的属性示例代码
2013/10/28 Javascript
jQuery遍历对象、数组、集合实例
2014/11/08 Javascript
JavaScript中的call方法和apply方法使用对比
2015/08/12 Javascript
js实现Form栏显示全格式时间时钟效果代码
2015/08/19 Javascript
JS根据浏览器窗口大小实时动态改变网页文字大小的方法
2016/02/25 Javascript
JavaScript reduce和reduceRight详解
2016/10/24 Javascript
jQuery实现select模糊查询(反射机制)
2017/01/14 Javascript
Bootstrap选项卡学习笔记分享
2017/02/13 Javascript
深入理解vue-router之keep-alive
2017/08/31 Javascript
Vue源码解读之Component组件注册的实现
2018/08/24 Javascript
详解Vue前端生产环境发布配置实战篇
2019/05/07 Javascript
vue路由传参三种基本方式详解
2019/12/09 Javascript
[01:22]DOTA2神秘商店携大量周边降临完美大师赛
2017/11/07 DOTA
[01:02:00]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第三场 1月24日
2021/03/11 DOTA
python网络编程之数据传输UDP实例分析
2015/05/20 Python
对Python字符串中的换行符和制表符介绍
2018/05/03 Python
Python解析m3u8拼接下载mp4视频文件的示例代码
2021/03/03 Python
关于CSS Tooltips(鼠标经过时显示)的效果
2013/04/10 HTML / CSS
html5桌面通知(Web Notifications)实例解析
2014/07/07 HTML / CSS
澳大利亚波希米亚风时尚品牌:Tree of Life
2019/09/15 全球购物
ORLY官网:美国专业美甲一线品牌
2019/12/11 全球购物
汽车制造与装配专业自荐信范文
2014/01/02 职场文书
公司庆典活动邀请函
2014/01/09 职场文书
探亲邀请信范文
2014/01/30 职场文书
个人简历自我评价
2014/02/02 职场文书
大学生励志演讲稿
2014/04/25 职场文书
保护黄河倡议书
2014/05/16 职场文书
2014年高三班主任工作总结
2014/12/05 职场文书
Oracle设置DB、监听和EM开机启动的方法
2021/04/25 Oracle
Django实现WebSocket在线聊天室功能(channels库)
2021/09/25 Python
Python pyecharts绘制条形图详解
2022/04/02 Python