【Day08-比较】我们不一样——在python中判断相等的用法is, ==, 与如何判断nan

在用numpypandas处理资料的时候
我们很常会遇到需要nan的情况
而最初在处理它的时候,就因为要判断相等的方式用错而绕了不少弯路


我当初就是这个表情

NaN

Nan(Not a Number的缩写),在资讯科学中用来表示未定义的值
而在使用pandas读取表格资料的时候,如果遇到了空的栏位也会被存储成nan的形式

判断相等的方法

is —— 判断是否为同一个东西

a = [1, 2, 3]
b = [1, 2, 3]
c = a
print(a is b)
print(a is c)

初次在面对is==的时候可能会容易混淆
想说明明三个东西不都是[1,2,3]吗?为什麽会不相同呢
而这个会和python对於记忆体管理的机制有关
让我们来用id()来协助我们看一下不同变数的情况

print(id(a))
print(id(b))
print(id(c))

我们可以发现ac的id是相同的,表示这两个变数实际上在记忆体是储存在同一块区域的
因此这个时候我们用判断是否为同一个东西的is的时候自然就会得到a和c相同,而a和b不同的结果了

== —— 判断值是否相同

a = [1, 2, 3]
b = [1, 2, 3]
c = a
print(a == b)
print(a == c)

因为==是在考虑值是否相同,因此就算是储存在不同记忆体位置的变数,只要里面的值是相同的就会得到True的结果

那为我们再看一个例子

a = np.nan
b = np.nan

print(a == b)
print(a is b)

诶这奇怪了,为什麽是同一个东西却不相等呢?
然我们检查一下这两个变数的记忆体

print(id(a))
print(id(b))


确实是储存在同一个记忆体的同一个东西,那为何会不相等呢?

原因其实是来自np.nan对相等的定义——对於任何比较的值,np.nan都会视为不相等
因此只要把它放上==的时候,就一定是得到False的答案的

isnan

那我们要怎麽判断分不同的nan呢?这个时候通常就会需要用到特殊的函数来判断,例如np.isnan()

print(np.isnan(a))
print(np.isnan(b+1)) # nan进行计算仍然是nan

以上,因此之後如果遇到了缺失值的nan需要筛选和处理的时候,记得不要用错方法哦~


<<:  资料型别转转转,Ruby 30 天刷题修行篇第八话

>>:  09 | WordPress 图片区块 Image Block

Day10. 如何收拾需求变更的Boss,Blue Prism的降临 -BP改变流程Excel另存新档

做专案最怕就是一连串因应单位政策的改变而变更需求, 原本可以运作达成需求的系统,眼看就要结案, 却需...

Day6 风生水起,观元辰宫的木

在中国古代,木头可为梁,可为柱,可为墙 所有的建筑跟木都脱不了关系,木头为建筑之根本 当然,也涵盖到...

【Day 26】CSS Animation - CSS 动画资源蒐集与使用教学

by CSS Animations- Guide to Cubic Bezier Curves 关...

Day26 Let's ODOO: ODOO Studio

今天来介绍Odoo studio,对於程序苦手或非程序人员,运用Odoo studio可以直接透过见...

Day 21 : 笔记篇 08 — 数位笔记太多很凌乱怎麽办?使用 MOC 架构有系统地管理数百则的数位笔记

一、当笔记愈来愈多时,会发生什麽问题? 多数人使用笔记软件或是文件愈来愈多时一定都会遭遇相同问题:想...