python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Pandas检测None和Nan

Pandas检测None和Nan的实现方式

作者:SunnyRivers

文章总结:Pandas中None(空值)和NaN(非数)需区分检测,isnull/isna用于识别缺失值,math.isnan检测NaN,is运算符或==检测None,两者概念不同,需根据场景选择合适方法

前言

使用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。

首先,让我们看一下如何检测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"。

x = None
if x is None:
    print("x is None")

在上面的代码中,我们将None赋给变量x,然后使用is运算符来检测x是否为None。

如果是,就会打印出"x is None"。另外,还可以使用==运算符来检测变量是否等于None,这与使用is运算符的结果是等效的。

需要注意的是:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文