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程序抓取网页的HTML信息的一个小实例
May 02 Python
Django模板变量如何传递给外部js调用的方法小结
Jul 24 Python
python数字图像处理实现直方图与均衡化
May 04 Python
python 利用for循环 保存多个图像或者文件的实例
Nov 09 Python
python opencv实现证件照换底功能
Aug 19 Python
PyCharm使用之配置SSH Interpreter的方法步骤
Dec 26 Python
Pytorch 实现focal_loss 多类别和二分类示例
Jan 14 Python
Python flask框架端口失效解决方案
Jun 04 Python
Pandas的数据过滤实现
Jan 15 Python
python tkinter实现下载进度条及抖音视频去水印原理
Feb 07 Python
Python import模块的缓存问题解决方案
Jun 02 Python
使用Python解决图表与画布的间距问题
Apr 11 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对mongodb的扩展(初出茅庐)
2012/11/11 PHP
php 判断网页是否是utf8编码的方法
2014/06/06 PHP
PHPAnalysis中文分词类详解
2014/06/13 PHP
PHP使用DOMDocument类生成HTML实例(包含常见标签元素)
2014/06/25 PHP
PHP环境中Memcache的安装和使用
2015/11/05 PHP
php微信公众平台开发(三)订阅事件处理
2016/12/06 PHP
Jquery css函数用法(判断标签是否拥有某属性)
2011/05/28 Javascript
ASP.NET jQuery 实例4(复制TextBox的文本到本地剪贴板上)
2012/01/13 Javascript
如何在一个页面显示多个百度地图
2013/04/07 Javascript
onkeydown事件解决按回车键直接提交数据的需求
2013/04/11 Javascript
Jquery中给animation加更多的运作效果实例
2013/09/05 Javascript
JSONP跨域的原理解析及其实现介绍
2014/03/22 Javascript
JavaScript仿百度图片浏览效果
2016/11/23 Javascript
VueJs路由跳转——vue-router的使用详解
2017/01/10 Javascript
如何正确理解javascript的模块化
2017/03/02 Javascript
vue.js中toast用法及使用toast弹框的实例代码
2018/08/27 Javascript
vue 使用html2canvas将DOM转化为图片的方法
2018/09/11 Javascript
Swiper.js实现移动端元素左右滑动
2019/09/08 Javascript
在vscode 中设置 vue模板内容的方法
2020/09/02 Javascript
鸿蒙系统中的 JS 开发框架
2020/09/18 Javascript
详解Python中time()方法的使用的教程
2015/05/22 Python
python中os模块详解
2016/10/14 Python
Python 装饰器使用详解
2017/07/29 Python
python Web flask 视图内容和模板实现代码
2019/08/23 Python
Python join()函数原理及使用方法
2020/11/14 Python
使用CSS3的appearance属性改变元素的外观的方法
2015/12/12 HTML / CSS
九年级数学教学反思
2014/02/02 职场文书
协议书怎么写
2014/04/21 职场文书
元旦晚会活动总结
2014/07/09 职场文书
道歉的话怎么说
2015/05/12 职场文书
大学生入党群众意见书
2015/06/02 职场文书
2016年“世界环境日”校园广播稿
2015/12/18 职场文书
Nginx URL重写rewrite机制原理及使用实例
2021/04/01 Servers
如何理解Vue简单状态管理之store模式
2021/05/15 Vue.js
教你怎么用Python生成九宫格照片
2021/05/20 Python
vue-cropper组件实现图片切割上传
2021/05/27 Vue.js