我正在使用python中的collections.Counter
对象进行频率分布。这些对象从值映射到每个值出现的次数(频率)。我传入的数据包含nan
个值。
由于我不知道Counter
面对nan
值时的行为,所以
我从玩具输入开始:
list_a = [np.nan, np.nan, np.nan, 1, 2, 3, 4, 5]
。
然后我实例化了Counter
:c = Counter(list_a)
最后,我打印了c:print(c)
输出:Counter({nan: 3, 1: 1, 2: 1, 3: 1, 4: 1, 5: 1})
在这种情况下,Counter
正确地完成了自己的工作,即使使用np.nan
也是如此。
但是,当我传递与pd.Series相同的信息而不是列表时:
c = Counter(pd.Series([np.nan, np.nan, np.nan, 1,2,3,4,5]))
Counter(c)
无法正常工作并返回:
Counter({nan: 1, nan: 1, 2.0: 1, 3.0: 1, 4.0: 1, 5.0: 1, nan: 1, 1.0: 1})
即使我将pd.Series
转换回列表:
c = Counter(list(pd.Series([np.nan, np.nan, np.nan, 1,2,3,4,5]).values))
Counter(c)
无法正常工作并返回相同的内容:
Counter({nan: 1, nan: 1, 2.0: 1, 3.0: 1, 4.0: 1, 5.0: 1, nan: 1, 1.0: 1})
这里发生了什么?为什么对“相同”列表进行不同的评估? (它们在内部肯定是不同的。)也许np.nan和nan不同?