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学习笔记_数据排序方法
May 22 Python
Python日志模块logging简介
Apr 13 Python
Python中数字以及算数运算符的相关使用
Oct 12 Python
机器学习的框架偏向于Python的13个原因
Dec 07 Python
python实现二叉查找树实例代码
Feb 08 Python
Python paramiko模块的使用示例
Apr 11 Python
使用python爬取B站千万级数据
Jun 08 Python
Python3实现的简单三级菜单功能示例
Mar 12 Python
django使用xadmin的全局配置详解
Nov 15 Python
简单了解python数组的基本操作
Nov 26 Python
Python函数式编程实例详解
Jan 17 Python
Python 使用双重循环打印图形菱形操作
Aug 09 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动态生成静态HTML网页的代码
2010/03/04 PHP
通过php快速统计某个数据库中每张表的数据量
2012/09/04 PHP
php抽象类用法实例分析
2015/07/07 PHP
PHP基于新浪IP库获取IP详细地址的方法
2017/05/04 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
2019/12/13 PHP
新闻内页-JS分页
2006/06/07 Javascript
js模仿windows桌面图标排列算法具体实现(附图)
2013/06/16 Javascript
jQuery中prepend()方法使用详解
2015/08/11 Javascript
JS实现带有3D立体感的银灰色竖排折叠菜单代码
2015/10/20 Javascript
jQuery EasyUI之DataGrid使用实例详解
2016/01/04 Javascript
JS简单实现tab切换效果的多窗口显示功能
2016/09/07 Javascript
jquery.multiselect多选下拉框实现代码
2016/11/11 Javascript
JavaScript简单拖拽效果(1)
2017/05/17 Javascript
浅谈vue中数据双向绑定的实现原理
2017/09/14 Javascript
利用vue.js把静态json绑定bootstrap的table方法
2018/08/28 Javascript
jquery登录的异步验证操作示例
2019/05/09 jQuery
Vue父子组件传值的一些坑
2020/09/16 Javascript
Python numpy实现数组合并实例(vstack,hstack)
2018/01/09 Python
基于pip install django失败时的解决方法
2018/06/12 Python
python异常触发及自定义异常类解析
2019/08/06 Python
PyCharm如何导入python项目的方法
2020/02/06 Python
CSS3属性 line-clamp控制文本行数的使用
2020/03/19 HTML / CSS
基于HTML5+Webkit实现树叶飘落动画
2017/12/28 HTML / CSS
比利时网上药店: Drogisterij.net
2017/03/17 全球购物
英国版MAC彩妆品牌:Illamasqua
2018/04/18 全球购物
MAC Cosmetics官方网站:魅可专业艺术彩妆
2019/04/10 全球购物
餐厅总经理岗位职责
2013/12/31 职场文书
关于赌博的检讨书
2014/01/24 职场文书
护理学专业求职信
2014/06/29 职场文书
纪律教育学习心得体会
2014/09/02 职场文书
尊师重教演讲稿
2014/09/04 职场文书
汇报材料怎么写
2014/12/30 职场文书
放假通知
2015/04/14 职场文书
车位出租协议书范本
2016/03/19 职场文书
Python爬取奶茶店数据分析哪家最好喝以及性价比
2022/09/23 Python