【发布时间】:2018-04-01 05:58:15
【问题描述】:
我注意到将 NaN 值列表转换为集合时出现问题:
import pandas as pd
import numpy as np
x = pd.DataFrame({'a':[None,None]})
x_numeric = pd.to_numeric(x['a']) #converts to numpy.float64
set(x_numeric)
这应该返回 {nan} 而是返回 {nan, nan}。但是,这样做:
set([numpy.nan, numpy.nan])
返回预期的 {nan}。前者显然是类 numpy.float64,而后者默认是类 float。
知道为什么 set() 不适用于 numpy.float64 NaN 值吗?我使用的是 Pandas 0.18 版和 Numpy 1.10.4 版。
【问题讨论】:
-
在 numpy 中,两个 nan 不相等。在列表中,它们可能相同,但在 numpy 数组中不同。要找出答案,请尝试
set(np.array([np.nan,np.nan]))。在 pandas 中,它们的系列将采用 numpy 数组格式 -
x_numeric.unique()只返回[nan],这很有趣。 -
好吧,我现在有点困惑了。
-
@cᴏʟᴅsᴘᴇᴇᴅ 这解决了我的直接问题,谢谢!奇怪的是 np.unique(x_numeric) 仍然返回 {nan, nan}。
-
@AndyHayden 我明白了!也感谢您的回答,它非常有用。看看你是否也可以回答mine.. :-)