在用numpy
和pandas
处理资料的时候
我们很常会遇到需要nan
的情况
而最初在处理它的时候,就因为要判断相等的方式用错而绕了不少弯路
我当初就是这个表情
Nan(Not a Number的缩写),在资讯科学中用来表示未定义的值
而在使用pandas
读取表格资料的时候,如果遇到了空的栏位也会被存储成nan的形式
但
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))
我们可以发现a
和c
的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
的答案的
那我们要怎麽判断分不同的nan
呢?这个时候通常就会需要用到特殊的函数来判断,例如np.isnan()
print(np.isnan(a))
print(np.isnan(b+1)) # nan进行计算仍然是nan
以上,因此之後如果遇到了缺失值的nan需要筛选和处理的时候,记得不要用错方法哦~
>>: 09 | WordPress 图片区块 Image Block
做专案最怕就是一连串因应单位政策的改变而变更需求, 原本可以运作达成需求的系统,眼看就要结案, 却需...
在中国古代,木头可为梁,可为柱,可为墙 所有的建筑跟木都脱不了关系,木头为建筑之根本 当然,也涵盖到...
by CSS Animations- Guide to Cubic Bezier Curves 关...
今天来介绍Odoo studio,对於程序苦手或非程序人员,运用Odoo studio可以直接透过见...
一、当笔记愈来愈多时,会发生什麽问题? 多数人使用笔记软件或是文件愈来愈多时一定都会遭遇相同问题:想...