2015-05-20 16 views
2

如问题Convert python list with None values to numpy array with nan values的回答所示,如果强制执行dtype = float,则可以直接从列表中使用None值初始化遮罩的numpy数组。这些浮点值转换为:南,我们可以简单地做:从Python int列表中初始化numpy masked array无值

ma.masked_invalid(np.array(a, dtype=float), copy=False) 

不过,这不会对INT喜欢的工作:

ma.masked_invalid(np.array(a, dtype=int), copy=False) 

因为中间np.array不会无值创建(没有int nan)。

什么是最有效的方式来初始化一个基于Python的蒙面数组列表,其中也包含无值的这些无值被掩盖的值的蒙面数组?

+0

我不要以为没有暂时的a就不会有这样做的好方法对象dtype的rray。确保你选择的解决方案没有在它的末尾结束一个对象dtype。 – user2357112

回答

1

最优雅的解决方案我迄今为止发现的(并且它根本不是优雅的)是初始化类型为float的掩模阵列并将其转换为int后rwards:

ma.masked_invalid(np.array(a, dtype=float), copy=False).astype(int) 

这产生了适当的NP阵列,其中所述初始阵列aNone值被屏蔽。例如,对于:

a = [1, 2, 3, None, 4] 
ma.masked_invalid(np.array(a, dtype=float), copy=False).astype(int) 

我们得到:

masked_array(data = [1 2 3 -- 4], 
      mask = [False False False True False], 
     fill_value = 999999) 

而且,实际的蒙面INT值变得分钟INT,即

ma.masked_invalid(np.array(column, dtype=float), copy=False).astype(int).data 

给出:

array([     1,     2,     3, 
     -9223372036854775808,     4]) 
0

你不能,但你可以创建object dtype细胞

ma.masked_invalid(np.array(a, dtype=object), copy=False) 

编辑的numpy的阵列

否则你可以到这里看看NumPy or Pandas: Keeping array type as integer while having a NaN value

+0

是的,但我最终需要int。完整的答案应该为我提供一个类型为int的蒙面数组。什么是最有效的方式来实现呢? –

+0

最后的编辑可能对你有所帮助 – farhawa

+0

看来nan还是没有把它变成numpy int。什么是通过对象的最佳方式呢? –