int数组,缺少值numpy

时间:2017-02-22 19:51:03

标签: python arrays pandas numpy

Numpy int数组无法存储缺失值。

>>> 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.])

Pandas在文档中警告这一点 - Caveats and Gotchas, Support for int NA。 Wes McKinney也重申了这一点stack question

我需要能够在int数组中存储缺失值。我正在将行插入到我的数据库中,我已将其设置为仅接受不同大小的整数。

我目前的工作是将数组存储为一个对象,它可以同时包含int和None-types作为元素。

>>> 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 个答案:

答案 0 :(得分:0)

我找到了一种非常快速的方法,可以将数据框中的所有缺失值转换为无类型。 .where方法

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

它比以前的内存密集程度低得多。