В массивах Numpy int не сохраняются отсутствующие значения.int array с отсутствующими значениями 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. Я INSERTING строк в моей базе данных, которые я настроил, чтобы принимать только ints различных размеров.
Моя текущая работа заключается в том, чтобы хранить массив как объект, который может содержать как ints, так и 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 продолжается.
Как насчет 'numpy.ma.MaskedArray'? – MSeifert
Интересно. Вы знаете, работает ли это с Пандами? – Nirvan
Это может быть немного взломано. Не можете ли вы назначить назначенное целое число для заполнения этих отсутствующих значений? Вы можете зарезервировать такое целочисленное число, чтобы заполнить только отсутствующие значения. почему вы хотите вставить только «Нет» вместо пропущенных значений? – kmario23