(Python.collections.Counter)面对nan值时Counter的异常行为

时间:2018-12-01 06:44:08

标签: python pandas data-science numerical-computing

我正在使用python中的collections.Counter对象进行频率分布。这些对象从值映射到每个值出现的次数(频率)。我传入的数据包含nan个值。


由于我不知道Counter面对nan值时的行为,所以

  1. 我从玩具输入开始: list_a = [np.nan, np.nan, np.nan, 1, 2, 3, 4, 5]

  2. 然后我实例化了Counterc = Counter(list_a)

  3. 最后,我打印了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不同?

0 个答案:

没有答案