2012-10-03 29 views
23

有沒有辦法將NaN存儲在一個Numpy數組中? 我得到:Numpy integer nan

a=np.array([1],dtype=long) 
a[0]=np.nan 

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: cannot convert float NaN to integer 
+0

@ tpg2114,是的,如果答案是關於numpy或pandas,那麼它不會清楚。 – Yariv

回答

23

不,你不能,至少目前的版本是NumPy。 A nan是浮法陣列的特殊值只有

有關於引入一個特殊位的討論,該特殊位允許非浮點數組存儲實際上對應於nan的內容,但到目前爲止(2012/10)僅僅是會談。

與此同時,您可能需要考慮numpy.ma程序包:您可以使用特殊的numpy.ma.masked值代替無效的值,而不是選擇像-99999這樣的無效整數。

a = np.ma.array([1,2,3,4,5], dtype=int) 
a[1] = np.ma.masked 
masked_array(data = [1 -- 3 4 5], 
      mask = [False True False False False], 
     fill_value = 999999) 
+4

但請注意,使用蒙版數組會有巨大的性能成本,因爲它們是在純Python中實現的! – gaborous

4

阿男是浮點唯一的事情,沒有在整數沒有它的代表,所以沒有:)

選擇一個無效的值,比如-99999

+3

將規範值選擇爲無效將不是一個好的解決方案,因爲它不會複製與nan相同的屬性,即:nan與包括其自身在內的任何其他值之間的比較應該是錯誤的。 – christang