Python笔记:Pandas的isna() vs isnull() vs numpy.isnan()有什么区别?

2020.12补充:目前 np.nan''不再相等,举栗子:

import pandas as pd
import numpy as np

df = pd.DataFrame({'tem': ['a', 'b', 'c', ''],
                   'tem1': ['a', np.nan, '', 'd'],
                   'tem2': ['a', 'b', 'c', 'd']})

df['new'] = df['tem'] + df['tem1'] + df['tem2']
print(df)
# 结果如下
  tem tem1 tem2  new
0   a    a    a  aaa
1   b  NaN    b  NaN  # 注意:列new这里直接是NaN
2   c         c   cc
3        d    d   dd 

print(df[df['tem1'].isna()])
# 结果如下
  tem tem1 tem2  new
1   b  NaN    b  NaN    # 注意:结果仅有 NaN的

print(df[df['tem1']==''])
# 结果如下
  tem tem1 tem2 new
2   c         c  cc   # 注意:结果无 NaN的

附注:线下csv文件,空格在DataFrame里边也是用的“NaN”表示。


Pandas isna() vs isnull()

我觉得咱要说的是pandas.DataFrame.isna() vs pandas.DataFrame.isnull()。而不是pandas.isnull(),因为它不是用于DataFrame的。
这俩函数的功用一模一样!它俩甚至连官方文档都一模一样。你点击pandas的官网文档就明白了。

但是为什么搞2个函数、取2个名字,来做同样的事儿?

这是因为pandas的DataFrame是基于R的DataFrame。在R里边nanull是分开的2个东西。更多相关信息请参考这篇文章

然而,在python里边,pandas是建在numpy上的(即numpy的定制版),而numpy可是没na,也没null,只有NaN的(是 “Not a Number”的缩写)。因此,pandas还用NaN

简单说呢就是:
  • numpy里边查找NaN值的话,就用np.isnan()
  • pandas里边查找NaN值的话,要么.isna(),要么.isnull()
  • NaN源于这样一个事实:即pandas构建在numpy之上,而这两个函数的名称源自R的DataFrame,pandas就是试图模仿它的结构和功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值