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

作者:shangyj17 时间:2021-04-12 07:01:09 

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

来源:https://blog.csdn.net/qq_17753903/article/details/89814716

标签:Python,空值,赋值,None
0
投稿

猜你喜欢

  • Python的10道简单测试题(含答案)

    2021-12-28 03:57:24
  • Django中的ajax请求

    2022-10-19 10:28:14
  • Python股票数据可视化代码详解

    2021-11-29 15:48:47
  • Python库functools示例详解

    2021-03-10 07:01:27
  • 流行WEB开发语言比较之ASP篇

    2007-12-23 17:23:00
  • python模块常用用法实例详解

    2023-07-30 01:38:54
  • 简单的抓取淘宝图片的Python爬虫

    2022-01-19 14:42:31
  • 微信小程序实现图片上传功能

    2023-09-06 13:08:44
  • PyTorch深度学习模型的保存和加载流程详解

    2023-07-10 04:58:33
  • 事件检测

    2009-04-11 18:03:00
  • 基于python实现图书管理系统

    2022-11-28 05:46:42
  • Dreamweaver初学者常见问题解答

    2007-02-03 11:39:00
  • python应用之如何使用Python发送通知到微信

    2022-03-04 01:59:55
  • Python实现Tracert追踪TTL值的方法详解

    2023-06-24 13:08:14
  • 解决python3 网络请求路径包含中文的问题

    2023-07-09 00:14:23
  • python模块和包的应用BASE_PATH使用解析

    2021-04-15 09:46:36
  • javascript面向对象编程(四)

    2008-03-07 14:20:00
  • 如何利用Python批量处理行、列和单元格详解

    2023-02-05 05:07:35
  • Request.ServerVariables("HTTP_REFERER")的用法

    2008-06-19 13:33:00
  • 在cmd命令行里进入和退出Python程序的方法

    2023-07-18 04:21:14
  • asp之家 网络编程 m.aspxhome.com