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中使用urllib2伪造HTTP报头的2个方法
Jul 07 Python
python计算N天之后日期的方法
Mar 31 Python
Python中的连接符(+、+=)示例详解
Jan 13 Python
Python实现PS图像明亮度调整效果示例
Jan 23 Python
Pandas 合并多个Dataframe(merge,concat)的方法
Jun 08 Python
python爬虫之自动登录与验证码识别
Jun 15 Python
Django实现学生管理系统
Feb 26 Python
python将视频转换为全字符视频
Apr 26 Python
Python获取数据库数据并保存在excel表格中的方法
Jun 12 Python
Python全栈之列表数据类型详解
Oct 01 Python
python与mysql数据库交互的实现
Jan 06 Python
Python 发送SMTP邮件的简单教程
Jun 24 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数据结构与算法(PHP描述) 快速排序 quick sort
2012/06/21 PHP
php实现水仙花数的4个示例分享
2014/04/08 PHP
PHP中可以自动分割查询字符的Parse_str函数使用示例
2014/07/25 PHP
PHP多进程编程之僵尸进程问题的理解
2017/10/15 PHP
thinkphp5 加载静态资源路径与常量的方法
2017/12/24 PHP
php的命名空间与自动加载实现方法
2019/08/25 PHP
jquery+json实现的搜索加分页效果
2010/03/31 Javascript
jquery刷新页面的实现代码(局部及全页面刷新)
2011/07/11 Javascript
js获取height和width的方法说明
2013/01/06 Javascript
js中widow.open()方法使用详解
2013/07/30 Javascript
javascript获取当前的时间戳的方法汇总
2015/07/26 Javascript
JS延时提示框实现方法详解
2015/11/26 Javascript
JS实现旋转木马式图片轮播效果
2017/01/18 Javascript
nodejs socket服务端和客户端简单通信功能
2017/09/14 NodeJs
详解weex默认webpack.config.js改造
2018/01/08 Javascript
vue2.0+vue-dplayer实现hls播放的示例
2018/03/02 Javascript
Angular 封装并发布组件的方法示例
2018/04/19 Javascript
Vue 父子组件数据传递的四种方式( inheritAttrs + $attrs + $listeners)
2018/05/04 Javascript
移动端自适应flexible.js的使用方法(不用三大框架,仅写一个单html页面使用)推荐
2019/04/02 Javascript
vue实现文字横向无缝走马灯组件效果的实例代码
2019/04/09 Javascript
[04:03]辉夜杯主赛事 12月25日RECAP精彩回顾
2015/12/26 DOTA
使用python脚本实现查询火车票工具
2018/07/19 Python
python3常用的数据清洗方法(小结)
2019/10/31 Python
如何用python处理excel表格
2020/06/09 Python
美国汽车性能部件和赛车零件网站:Vivid Racing
2018/03/27 全球购物
NYX Professional Makeup英国官网:美国平价专业彩妆品牌
2019/11/13 全球购物
您熟悉ORM(Object-Relation Mapping)吗?请谈谈您所理解的ORM
2016/02/08 面试题
教师自我剖析材料范文
2014/09/30 职场文书
先进党支部事迹材料
2014/12/24 职场文书
挂职个人工作总结
2015/03/05 职场文书
2015年度优秀员工推荐信
2015/03/23 职场文书
早会开场白台词大全
2015/06/01 职场文书
如何写一份具有法律效力的借款协议书?
2019/07/02 职场文书
Python实现的扫码工具居然这么好用!
2021/06/07 Python
java设计模式--建造者模式详解
2021/07/21 Java/Android
不同品牌、不同型号对讲机如何互相通联
2022/02/18 无线电