2015-05-20 21 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。什麼是通過對象的最佳方式呢? –