Pandas检测None和Nan的实现方式
作者:SunnyRivers
前言
使用pandas的时候经常需要检测空值,但每次感觉都判断不全或者感觉很困惑,因此这里做个简单的总结
None
None是Python的特殊类型,NoneType对象,它只有一个值None.它不支持任何运算也没有任何内建方法。
None和任何其他的数据类型比较永远返回False。
None有自己的数据类型NoneType。你可以将None复制给任何变量,但是你不能创建其他NoneType对象。
- 数据类型
>>>type(None) <class 'NoneType'>
Nan
python 中Nan是not a number(非数)它即不是无穷大, 也不是无穷小,无穷大减无穷大会导致NaN,无穷大乘以0或无穷小或除以无穷大会导致NaN,有NaN参与的运算, 其结果也一定是NaN,NaN != NaN
- 数据类型
>>>type(np.nan) <class 'float'>
Null
- 空字符串
>>>type('') <class ''str'>
如何检测
个人感觉最好用的是pd.isnull(或pd.isna)
isnull和isna区别
isnull是isna的别名,既然一样为什么要搞两个名字?Pandas dataframe是根据R的dataframe设计的,而R语言中na和null是两种不同的数据类型,因此有isna和isnull,python就保留了这两个方法,isnull是isna的别名而已;
另一方面,pandas是建立在numpy之上的,numpy中又没有na或null值,而是用np.nan来表示缺失值,所以pd.isnull不仅可以检测np.nan也可以检测None
注意
pd.isnull是不可以检测字符串的,比如’',‘nan’,‘None’。这个也很好理解,字符串有字符串的判断方式。
比较全面的判断这些与空值有关的方法
i == '' or pd.isnull(i) or pd.isnull(float('nan')) (或者 i =='nan') or i =='None'
煮个栗子
list = ['nan', '', 'None', None, np.nan] for i in list: if i == '' or pd.isnull(i) or pd.isnull(float('nan')) or i == 'None': print(i)
结果
nan None None nan
后记
当然除了用pandas,python中还有其他方式检测None和Nan。
- math.isnan
首先,让我们看一下如何检测NaN。Python提供了一个名为math.isnan()的函数,可以用来检测一个值是否为NaN。这个函数需要导入math模块才能使用。下面是一个示例代码:
import math x = float('nan') if math.isnan(x): print("x is NaN")
在上面的代码中,我们将一个NaN值赋给变量x,然后使用math.isnan()函数来检测x是否为NaN。如果是,就会打印出"x is NaN"。
- is运算符检测None
x = None if x is None: print("x is None")
在上面的代码中,我们将None赋给变量x,然后使用is运算符来检测x是否为None。
如果是,就会打印出"x is None"。另外,还可以使用==运算符来检测变量是否等于None,这与使用is运算符的结果是等效的。
需要注意的是:
- NaN和None是两种不同的概念。NaN用于表示非法的数字,而None表示空值或缺失值。
- 因此,在不同的情况下,我们需要使用不同的方法来检测它们。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。