根据项目是否属于类别,在!=
比较中似乎存在不一致的行为。如果值在类别中,!= NaN
将返回False,这似乎与正常的!= NaN
比较的评估方式不一致。当值不在类别中时,行为似乎是预期的。
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
上。
发布于 2020-03-03 17:17:38
原因似乎是在处理类别类型数据时对待NaN
的方式。对于分类数据,没有包含在类别中的值被NaN
替换,即NaN
被视为不存在的类别。我们可以通过创建一个序列来检查,如下所示并指定现有的类别:
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'
的值的相同行为
c != '3'
array([ True, True, False, False, False])
https://stackoverflow.com/questions/60511951
复制相似问题