Pandas检测None和Nan的实现方式

 更新时间:2025年09月01日 16:36:01   作者: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。

  • 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表示空值或缺失值。
  • 因此,在不同的情况下,我们需要使用不同的方法来检测它们。

总结

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

相关文章

  • Python-Flask:动态创建表的示例详解

    Python-Flask:动态创建表的示例详解

    今天小编就为大家分享一篇Python-Flask:动态创建表的示例详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • 如何使用Python抓取网页tag操作

    如何使用Python抓取网页tag操作

    这篇文章主要介绍了如何使用Python抓取网页tag操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • Python SQLite3数据库操作类分享

    Python SQLite3数据库操作类分享

    这篇文章主要介绍了Python SQLite3数据库操作类分享,需要的朋友可以参考下
    2014-06-06
  • Python:二维列表下标互换方式(矩阵转置)

    Python:二维列表下标互换方式(矩阵转置)

    今天小编就为大家分享一篇Python:二维列表下标互换方式(矩阵转置),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • Pytorch中TensorDataset,DataLoader的联合使用方式

    Pytorch中TensorDataset,DataLoader的联合使用方式

    这篇文章主要介绍了Pytorch中TensorDataset,DataLoader的联合使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Python scrapy爬取小说代码案例详解

    Python scrapy爬取小说代码案例详解

    这篇文章主要介绍了Python scrapy爬取小说代码案例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Python内存池机制的实现

    Python内存池机制的实现

    Python内存池是Python解释器为了提高内存分配效率而设计的一种内存管理机制,本文主要介绍了Python内存池机制的实现,具有一定的参考价值,感兴趣的可以了解一下
    2025-04-04
  • Python中seaborn库之countplot的数据可视化使用

    Python中seaborn库之countplot的数据可视化使用

    在Python数据可视化中,seaborn较好的提供了图形的一些可视化功效。本文详细的介绍了Python中seaborn库之countplot的数据可视化使用,感兴趣的可以了解一下
    2021-06-06
  • python实现获取客户机上指定文件并传输到服务器的方法

    python实现获取客户机上指定文件并传输到服务器的方法

    这篇文章主要介绍了python实现获取客户机上指定文件并传输到服务器的方法,涉及Python实现C/S架构程序与socket程序的使用技巧,需要的朋友可以参考下
    2015-03-03
  • 详解Python3序列赋值、序列解包

    详解Python3序列赋值、序列解包

    这篇文章主要介绍了Python3序列赋值、序列解包的相关知识,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05

最新评论