Pandas中pd.isnull与pd.isna的关系_Jason_WangYing的博客-程序员秘密

技术标签: python3  pandas  python  

最近在使用Pandas时发现判断缺省值时有两个方法,一直在奇怪这两个的用法区别,今天终于下定决心去查找下。

pd.isnull == pd.isna

(1) 有趣的现象

先看下面几行代码:

pd.isnull
>>> <function pandas.core.dtypes.missing.isna(obj)>
pd.isna
>>> <function pandas.core.dtypes.missing.isna(obj)>
pd.isnull == pd.isna
>>> True

为什么?

(2) 原因

首先看pandas 0.21版本的改变,官方文档原文如下:

In order to promote more consistency among the pandas API, we have
added additional top-level functions isna() and notna() that are
aliases for isnull() and notnull(). The naming scheme is now more
consistent with methods like .dropna() and .fillna(). Furthermore in
all cases where .isnull() and .notnull() methods are defined, these
have additional methods named .isna() and .notna(), these are included
for classes Categorical, Index, Series, and DataFrame. (GH15001).
The configuration option pd.options.mode.use_inf_as_null is deprecated,
and pd.options.mode. use_inf_as_na is added as a replacement.

官方文档已经说的很清楚,isna()和notna()是isnull()和notnull()的别名,它们的用法是一样的。
注意:在pandas 0.21之前的版本中是没有isna和notna的,如果pandas版本是之前的老版本,会报错AttributeError: module ‘pandas‘ has no attribute ‘isna‘
需要pip install --upgrade pandas 一下即可。具体可点击链接查看

 

那么,为什么用两个名称不同的方法做相同的事情?

  1. pandas的DataFrame数据类型基于R的DataFrame数据类型,在R语言中,na和null是两种不同的东西,两个类型是分开的。
    (1) null 表示R中的空对象
    (2) NA 表示R中长度为1的逻辑常数,即NA是一个逻辑值,表示逻辑不确定值的结果。
    R中的NA与NULL: https://www.r-bloggers.com/r-na-vs-null/
  2. 同时pandas也是基于numpy,它是构建在numpy之上的。在numpy中,既没有na也没有null,而只有NaN (意思是“Not a Number”),因此,pandas也沿用NaN值。所以造成了isna和isnull两个名称不同但功能相同的情况。
    pandas的isna 、isnull源码: https://github.com/pandas-dev/pandas/blob/master/pandas/core/dtypes/missing.py

简单的说:

  • numpy用isnan()检查是否存在NaN。
  • pandas用isna()或者isnull()检查是否存在NaN。
  • 存在着两种方法,只是因为pandas对R的模仿。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Jason_WangYing/article/details/109481883

智能推荐

易语言教程_v20200926_兔云程序的博客-程序员秘密

​什么是易语言?易语言下载和安装流程易语言的优点易语言真的那么不入流吗?易语言软件界面介绍易语言基础教程之菜单栏和工具栏易语言键盘代码一览表易语言基础教程之简单的人机交互易语言标签与按钮的综合运用易语言之多分支控制结构语句易语言之菜单的设计易语言之对话框易语言之进度条易语言盗号源码...

干货 | 超详细的渗透测试思维导图_渗透测试xmind_知白守黑V的博客-程序员秘密

经常有人问我渗透流程和思路,特此分享一张曾经在Github上看到的一张超级详细渗透测试思维导图,值得学习!

Lucene的多域查询、结果中查询、查询结果分页、高亮查询结果和结果评分_lucene queryfilter_最美的词的博客-程序员秘密

1.针对多个域的一次性查询1.1.三种方案        使用lucene构造搜索引擎的时候,如果要针对多个域进行一次性查询,一般来说有三种方法:    第一种实现方法是创建多值的全包含域的文本进行索引,这个方案最简单。但是这个防范有个缺点:你不能直接对每个域的加权进行控制。    第二种方法是使用MultiFieldQueryParser,它是QueryParser的子类,它会在

nested exception is java.lang.NoSuchMethodError:_吃猫的飞鱼的博客-程序员秘密

今天进行代码发布的时候,线上的一直此错误:Handler processing failed; nested exception is java.lang.NoSuchMethodError: xxx网上查了一下错误,很多都说是jar的版本有冲突,或者不一致,又或者是多写了引入导致的,但是我的本地没有这个错误问题,而且线上的代码在我没有更新之前是没有问题的,我一更新就报错了,说明基本上不会是jar的版本问题,然后我运气好吧,找到了一篇大佬博文,然后说是报错提示的类可能是没有编译好导致的,然后我把报错的类

生物信息就该这么学(5):其实就是比对那点事儿_基因学苑的博客-程序员秘密

今天继续我们的生物信息就该这么学内容,其实生物信息分析每天做的工作就是各种比对。序列比对可以说是整个生物信息的核心,因为你会发现几乎每个生物信息分析过程都需要用到序列比对。判断两个基因或两段基因组片段是否相似是序列分析的基本工作。从序列数据库搜索,序列拼接到基因蛋白质功能注释,以及进化树构建等,都依赖于分子序列相似性的比较,也就是序列比对。测序得到一段序列,判断它是否属于新冠病毒,需要与已知病毒序列进行比对。你可以会反问,基因组拼接,变异检测也用到序列比对了吗,答案是肯定的。同源与相似序列比对的核心作.

Oracle 中 SQLCODE/SQLERRM_sqlcode 怎么记录道标_常飞梦的博客-程序员秘密

Oracle内置函数SQLCODE和SQLERRM是特别用在OTHERS处理器中,分别用来返回Oracle的错误代码和错误消息。OTHERS处理器应该是异常处理块中的最后的异常处理器,因为它是用来捕获除了别的异常处理器处理以外的所有的Oracle异常,所以在程序的最外层使用一个OTHERS处理器的话,将可以确保所有的错误都会被检测到。在一个内在的异常中,SQLCODE返回Oracle错误的

随便推点

浅谈如何进行网络安全评估_god_7z1的博客-程序员秘密

周连兵  摘要:随着网络技术的发展,网络信息系统逐渐深入到各行各业,网络安全也成为人们关注的话题,一个组织的信息系统经常面临内部和外部威胁的风险,如果你没有一定的黑客技术的经验与知识,很难充分保护你的系统。安全评估就是利用大量安全行业经验和漏洞扫描的最先进技术,从内部和外部两个角度,对一个组织的信息系统进行全面的评估。该文主要通过论述怎样进行安全评估,使广大网管、网络安全技术人员及用户

Java的printf方法_java printf方法_ginwafts的博客-程序员秘密

importjava.util.Date;/***使用printf输出*//**关键技术点*使用java.io.PrintStream的printf方法实现C风格的输出*printf方法的第一个参数为输出的格式,第二个参数是可变长的,表示待输出的数据对象*/publicclassPrintf { publicstat...

PAT--1007 素数对猜想(20 分)_素数对pat_wooo……小老弟!的博客-程序员秘密

1007 素数对猜想(20 分)让我们定义d​n​​为:d​n​​=p​n+1​​−p​n​​,其中p​i​​是第i个素数。显然有d​1​​=1,且对于n&amp;gt;1有d​n​​是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。现给定任意正整数N(&amp;lt;10​5​​),请计算不超过N的满足猜想的素数对的个数。输入格式:输入在一行给出正整数N。输出格式:在一行中输...

js之职责链模式_js 传播链插件_linhongyong的博客-程序员秘密

职责链模式的定义是:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象能处理它为止。 职责链模式的名字非常形象,一系列可能会处理请求的对象被连接成一条链,请求在这些对象之间依次传递,直到遇到一个可以处理它的对象,我们把这些对象称为链中的节点。level01:假设我们负责一个售卖手机的电商网站,经过分别交纳 500元定

Android获取父节点的所有子节点(CheckBox的使用,本次以CheckBox为例)_android获取当前页面所有节点_最菜的黑客的博客-程序员秘密

在开发中我们可能会遇到需要获取父节点的某个或者所有子节点,怎么做呢,Android里边有个方法View.getChildAt(int index);不用我多说了吧,这个方法就是返回View节点下的第Index个节点,有了这个方法,我们就能获取到父节点的某个或者所有子节点了,下面用代码实现首先XML文件里先放5个CheckBox(复选框),父节点为LinearLayout(id为all)&lt;LinearLayout xmlns:android="http://schemas.android.

TortoiseSvn不能比较office文件(出现800700e0错误等)处理_lanyou1900的博客-程序员秘密

最近一段时间发现TortoiseSvn忽然不能比较office文件了,特别是2007的。总是报告diff-doc.js有错误,找不到指定模块。一路查找各种方式都没解决问题。后来在一个论坛上看到别人提到重新按照Windows Script(http://www.pcreview.co.uk/forums/windows-script-host-error-code-8007007e-t36229