python编程,如何判断变量是否为缺失值NaN?NaN表述
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
上文对python
的空值None
做了描述,本文描述缺失值NaN
,英文解释为Not A Number
。None
是单独的一个NoneType
,而NaN
被理解为float
类型中的一员,这可能就是两者的最大区别。
大家好,这里是苏南大叔的“程序如此灵动”博客,这里讲述苏南大叔和计算机代码之间的故事。测试环境:python@3.6.8
,pandas@1.1.5
,numpy@1.24.4
。
NaN表述
关于NaN
的表述方式,有两种:
python
原生对于NaN
的表述是这样的:
n = float('nan')
也可以表述为:
from decimal import Decimal
n2 = Decimal('nan')
通过numpy
衍生的表述是这样的:
import numpy as np
n3 = np.nan
三者的输出,并不完全一致。
print(n, type(n)) # nan <class 'float'>
print(n2, type(n2)) # NaN <class 'decimal.Decimal'>
print(n3, type(n3)) # nan <class 'float'>
迷惑is判断【不推荐】
使用is
判断的话,明显好像有些烧脑。
print(n is n) # True
print(n2 is n2) # True
print(n3 is n3) # True
print(n is float('nan')) # False
print(n is Decimal('nan')) # False
print(n is np.nan) # False
print(n2 is float('nan')) # False
print(n2 is Decimal('nan')) # False
print(n2 is np.nan) # False
print(n3 is float('nan')) # False
print(n3 is Decimal('nan')) # False
print(n3 is np.nan) # True 注意只有这个是true
特别是下面这条,主打的就是叛逆不等于。下面这条怎么就等于了呢?可以推断:np.nan
这是个代言词,float('nan')
可能这个才是本尊。
print(n3 is np.nan) # True 注意只有这个是true
==自己,判断【推荐】
==自己
,返回值居然是False
,这是唯一一个不等于自己的变量!但是is 自己
返回值True
!
print(n == n) # False
print(n2 == n2) # False
print(n3 == n3) # False
math.isnan()
既然NaN
归属于浮点数,所以,使用math.isnan()
进行判断,无可厚非。
import math
print(math.isnan(n)) # True
print(math.isnan(n2)) # True
print(math.isnan(n3)) # True
numpy.isnan()
科学计算numpy
,也比如存在着一个isnan()
函数判断。
import numpy as np
print(np.isnan(n)) # True
# print(np.isnan(n2)) # TypeError: ufunc 'isnan' not supported for the input type
print(np.isnan(n3)) # True
这个表面:float('nan')
和Decimal('nan')
,也是有一定区别的,否则不会报错。对不?
dataframe.isnull()
并不是用来做这个事情的,不过也是可以做相关计算。略显复杂。
from pandas import DataFrame
print(DataFrame({n}).isnull().all()[0]) # True
print(DataFrame({n2}).isnull().any()[0]) # True
print(DataFrame({n3}).isnull().any()[0]) # True
正无穷、负无穷
值 | 表述1 | 表述2 | 表述3 |
---|---|---|---|
正无穷 | float("inf") | 暂无 | 暂无 |
负无穷 | float("-inf") | 暂无 | 暂无 |
缺失值 | float("nan") | Decimal('nan')) | np.nan |
正负无穷的情况,就待后续了。这里仅仅列出以表示两者和NaN
并不是一回事。
相关文章
- https://newsn.net/say/python-isnone.html
- https://newsn.net/say/python-all.html
- https://newsn.net/say/python-any.html
结语
不想写结语了,没有啥心情。连这些盗版我文章的兄弟,都不抄袭我的结语。郁闷...
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。