None 和 NaN分不清? pandas 难点彻底搞懂

Pandas 和 Numpy 是数据挖掘和数据科学中广泛使用的工具,但有时人们会对 None 和 NaN 感到困惑,它们非常相似但略有不同的数据类型。 在这里,我们通过一些示例彻底把问题弄清楚。

主要区别

Pandas 中 None 和 NaN 的区别可以总结为:

  1. None 表示信息确实,但其类型不是数字。 因此,任何包含 None 值的列(比如 Pandas Series)肯定不是数字类型,例如 int 或 float。
  2. NaN 代表非数字,是数字类型。 这意味着可以在 int 或 float 类型的数值列中找到 NaN。

动手测试

在下面的测试中,None 值会自动转换为 NaN 值,因为该list中的其他数值是数字, Pandas 自动将 None 转换为 NaN。NaN类型对于很多算术操作来更简单,因此被优先考虑。

import pandas as pd
pd.Series([1,None])
0    1.0
1    NaN
dtype: float64

在下面的测试中,该list系列中的另一个值是一个字符串,因此 None 值保持为 None 值。 这使得整个系列对象类型。

import pandas as pd
pd.Series(["1",None])
0       1
1    None
dtype: object

None 类型会导致更多的数值操作错误

为什么我们说,使用 NaN 类型对于许多常用操作会更有利?
因为NaN对许多算术运算来说是合法的。 例如,下面涉及None的操作会报错:

None + 1
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-8-3fd8740bf8ab> in <module>
----> 1 None + 1


TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'

但如果是NaN类型,就不会报错。

import numpy as np
np.nan + 1
nan

怎么查看dataframe中的数值是None或者NaN

有几种不同的方法可以检查数据类型是 None 还是 NaN 值;
首先可以使用 numpy,函数 np.isnan() 可以检查一个值是否为 NaN 值,但它不适用于 None 值。

np.isnan(np.nan)
True

零一方法,在 Pandas 中,有 isnull() 和 isna() 两个函数,它们实际上是同样的函数。 isnull() 只是 isna() 方法的别名; 基本上 isnull() 可以用来检测缺失值,因此 nan 或 None 都将为 True。

pd.isnull(np.nan)
True
pd.isnull(None)
True

英文链接

AI好书推荐

北大出版社,人工智能原理与实践 人工智能和数据科学从入门到精通 详解机器学习深度学习算法原理

人工智能原理与实践 全面涵盖人工智能和数据科学各个重要体系经典

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值