在熊猫系列中重复NaNs的集合

时间:2016-01-22 19:52:01

标签: python numpy pandas dataframe equality

我想检查一个数据框的列是否包含多个不同的值,因此我将该列作为一个集合,并检查其长度。但是我遇到了NaNs的问题。我期望所有NaN的列的长度都为零,但事实并非如此,为什么?

import pandas as pd
from numpy import nan

set([nan, nan, nan]) # set has one element
set(pd.Series([nan, nan, nan])) #set has three elements

numpy数组会发生同样的情况:

set(pd.np.array([nan, nan, nan])) #set has three elements

其他值不会发生这种情况:

set(pd.np.array([1,1,1])) #set has one element

2 个答案:

答案 0 :(得分:2)

Python世界中的对象标识

>>> L = [nan, nan, nan]
>>> L[0] is L[1]
True

数据框中的非Python值是副本

>>> s = pd.Series([nan, nan, nan])
>> s[0] is s[1]
False

NaNs始终不相等

>>> s[0] == s[1]
False

>>> L[0] == L[1]
False

答案 1 :(得分:1)

您可以将nuniquecount进行比较:

s1 = pd.Series([np.nan, np.nan, 1, 1, 2])
s2 = pd.Series([np.nan, np.nan, 1, 2, 3])

>>> s1.count() == s1.nunique()
False

>>> s2.count() == s2.nunique()
True

两种方法都排除所有非NA / null观察值。