python 导入的nan怎么解决_如何处理python里的Nan和None

0 前言

数据分析师在使用python进行数据分析时,经常会遇到 Nan 和 None 这两个数据缺失值,但它们两并不互相等价,有很多细微的差别。笔者将在下面对 Nan 和 None 进行细致的介绍。

1 什么是 Nan 和 None ?

Nan(not a number) 和 None 都是 python 里的数据缺失值,表示当前某些数据为“空”。

数据缺失值指现有数据集中某个或某些属性的值存在不完全的空值。

更准确的说,Nan 是出现在 numpy/pandas 里的缺失值,而 None 是 Python 的缺失值。某种意义上,None 是比 Nan 更高级、更彻底的空值。

2 Nan 和 None 的异同点

我们可以通过数据本身、其他类型函数、pandas等方面来比对。

2.1 数据本身

数据类型?

type(None) # NoneType

type(np.nan) # float

我们可以很直接的看到,在 python 里 None 是有着自己的独特类型(NoneType),而 Nan 则是属于 float 类型。

Nan 因为自身属于浮点数(特殊的float),从而能够参加部分运算。但 None 则不能参与任何运算。

等值性?

None == None # TRUE

None == np.nan # False

np.nan == np.nan # False

np.nan is np.nan # True

id(np.nan) == id(np.nan) # True

可以看到在这里,None 和 Nan 的表现也是不同的。

is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值是否相等。

a is b 相当于 id(a)==id(b),id() 能够获取对象的内存地址。

为什么 np.nan == np.nan 结果是 False,这涉及到 python 的另一个坑,有兴趣的同学可以参考这里

2.2 可迭代对象的表现

list 的表现

None 和 Nan 在 list 里的表现和等值性相同:

lst = [np.nan, None]

lst[0] == lst[0] # False

lst[0] == lst[1] # False

lst[1] == lst[1] # True

[np.nan, 1] == [None, 1] # False

dict 的表现

首先看在 key 值的表现:

print([i for i in {np.nan:1, None:1}]) # [nan, None]

{np.nan:1} == {np.nan:1} # True

我们可以看到,无论是 Nan 还是 None,都是可以作为 dict 的 key 值的。且互不相同(dict 不允许有相同 key 值)。

再看看 value 值:

dic = {'a':np.nan, 'b':None, 'c':np.nan, 'd':None}

print(dic['a'] == dic['b']) # False

print(dic['a'] == dic['c&

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值