首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么分类数据类型不能正确处理!= NaN比较?

为什么分类数据类型不能正确处理!= NaN比较?
EN

Stack Overflow用户
提问于 2020-03-04 00:48:59
回答 1查看 81关注 0票数 0

根据项目是否属于类别,在!=比较中似乎存在不一致的行为。如果值在类别中,!= NaN将返回False,这似乎与正常的!= NaN比较的评估方式不一致。当值不在类别中时,行为似乎是预期的。

代码语言:javascript
代码运行次数:0
运行
复制
import pandas as pd
import numpy as np

# Standard evaluation
'11' != np.NaN
#True

'A' != np.NaN
#True

s = pd.Series([np.NaN, '11']).astype('category')

s.ne('11')
#0    False   # <- What?
#1    False
#dtype: bool

s.ne('A')
#0    True
#1    True
#dtype: bool

# Without the category type the behavior is correct
pd.Series([np.NaN, '11']).ne('11')
#0     True
#1    False
#dtype: bool

这是一个错误,或者出于某种原因,categories?pd.__version__ = 0.25.0中的预期NaN行为,但也出现在1.0上。

EN

回答 1

Stack Overflow用户

发布于 2020-03-04 01:17:38

原因似乎是在处理类别类型数据时对待NaN的方式。对于分类数据,没有包含在类别中的值被NaN替换,即NaN被视为不存在的类别。我们可以通过创建一个序列来检查,如下所示并指定现有的类别:

代码语言:javascript
代码运行次数:0
运行
复制
c = pd.Categorical(values=['1','2',np.nan,'3','4'], categories=['1','2','3'])

print(c)
[1, 2, NaN, 3, NaN]
Categories (3, object): [1, 2, 3]

通过检查docs,我们可以看到:

缺少的值不应包含在分类的类别中,而应仅包含在值中。相反,可以理解,NaN是不同的,并且始终是一种可能性

因此,当与现有类别中的值进行比较时,会始终认为缺少值是一种可能性。

使用上面的示例,我们可以看到缺少值NaN和不存在的类别'4'的值的相同行为

代码语言:javascript
代码运行次数:0
运行
复制
c != '3'
array([ True,  True, False, False, False])
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60511951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档