numpy除去nan值_pandas numpy处理缺失值,none与nan比较

本文详细对比了Python中的None和numpy的NaN在数据处理中的行为差异,包括它们的数据类型、作为dict的key、在Series中的表现、在函数处理中的差异以及在数据类型转换和等值判断中的行为。实验结果显示,None和NaN在某些情况下会被互相替换,且在特定操作中可能引发错误。在使用pandas和numpy时,建议统一处理None和NaN,以避免潜在问题。
摘要由CSDN通过智能技术生成

原文链接:https://junjiecai.github.io/posts/2016/Oct/20/none_vs_nan/

建议从这里下载这篇文章对应的.ipynb文件和相关资源。这样你就能在Jupyter中边阅读,边测试文中的代码。

python原生的None和pandas, numpy中的numpy.NaN尽管在功能上都是用来标示空缺数据。但它们的行为在很多场景下确有一些相当大的差异。由于不熟悉这些差异,曾经给我的工作带来过不少麻烦。 特此整理了一份详细的实验,比较None和NaN在不同场景下的差异。

实验的结果有些在意料之内,有些则让我大跌眼镜。希望读者看过此文后会None和NaN这对“小妖精”有更深的理解。

为了理解本文的内容,希望本文的读者需要对pandas的Series使用有一定的经验。

首先,导入所需的库

from numpy import NaN

from pandas import Series, DataFrame

import numpy as np

数据类型?

None是一个python特殊的数据类型, 但是NaN却是用一个特殊的float

type(None)

NoneType

type(NaN)

float

能作为dict的key?

{None:1}

{None: 1}

{NaN:1}

{nan: 1}

{None:1, NaN:2}

{nan: 2, None: 1}

都可以,而且会被认为是不同的key

Series函数中的表现

Series.map

s = Series([None, NaN, 'a'])

s

0 None

1 NaN

2 a

dtype: object

s.map({None:1,'a':'a'})

0 1

1 1

2 a

dtype: object

可以看到None和NaN都会替换成了1

s.map({NaN:1,'a':'a'})

0 1

1 1

2 a

dtype: object

同样None和NaN都会替换成了1

s.map({NaN:2,'None':1,'a':'a'})

0 2

1 2

2 a

dtype: object

将None替换成1的要求被忽略了

s.map({'None':1,NaN:2,'a':'a'})

0 2

1 2

2 a

dtype: object

将NaN替换成1的要求被忽略了

总结: 用Series.map对None进行替换时,会“顺便”把NaN也一起替换掉;NaN也会顺便把None替换掉。

如果None和NaN分别定义了不同的映射数值,那么只有一个会生效。

Series.replace中的表现

s = Series([None, NaN, 'a'])

s

0 None

1 NaN

2 a

dtype: object

s.replace([NaN],9)

0 9

1 9

2 a

dtype: object

s.replace([None],9)

0 9

1 9

2 a

dtype: object

和Series.map的情况类似

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值