2017-02-22 96 views
0

Numpy int數組無法存儲缺失值。int數組缺失值numpy

>>> import numpy as np 
>>> np.arange(10) 
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 
>>> myArray = np.arange(10) 
>>> myArray.dtype 
dtype('int32') 

>>> myArray[0] = None 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType' 

>>> myArray.astype(dtype = 'float') 
array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.]) 
>>> myFloatArray = myArray.astype(dtype = 'float') 
>>> myFloatArray[0] = None 

>>> myFloatArray 
array([ nan, 1., 2., 3., 4., 5., 6., 7., 8., 9.]) 

熊貓警告有關此內容的文檔 - Caveats and Gotchas, Support for int NA。 Wes McKinney也重申了這一點stack question

我需要能夠將缺失值存儲在int數組中。我將行插入到我設置的數據庫中,只接受不同大小的整數。

我目前的工作是將數組存儲爲一個對象,該對象可以將int和None類型作爲元素存儲。

>>> myArray.astype(dtype = 'object') 
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=object) 
>>> myObjectArray = myArray.astype(dtype = 'object') 
>>> myObjectArray[0] = None 
>>> myObjectArray 
array([None, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=object) 

這對於大型數據集似乎是內存密集型和緩慢的。我想知道是否有人有更好的解決方案,而numpy的開發正在進行中。

+1

'numpy.ma.MaskedArray'呢? – MSeifert

+0

有趣。你知道它是否適用於熊貓? – Nirvan

+1

這可能有點哈克。你不能指定一個指定的整數來填補這些缺失的值嗎?您可以保留這樣一個整數來僅填充缺失的值。爲什麼你只想插入'None'來代替缺失值? – kmario23

回答

0

我發現了一種非常快速的方法來將我的數據框中的所有缺失值轉換爲無類型。 .where方法

mydata = mydata.where(pd.notnull(mydata), None) 

這比我之前做的內存密集程度少得多。