Python: как преобразовать весь массив в int - PullRequest
0 голосов
/ 27 марта 2019

Я хочу иметь матрицу int, в которой заполнен только первый столбец, а остальные элементы равны Null.Извините, но у меня есть фон R.Итак, я знаю, что если я оставлю некоторые элементы Null, ими будет легче управлять позже.Между тем, если я уйду 0, то будет много проблем позже.

У меня есть следующий код:

   import numpy as np
   import numpy.random as random
   import pandas as pa

    def getRowData():
        rowDt = np.full((80,20), np.nan)
        rowDt[:,0] =  random.choice([1,2,3],80) # Set the first column
        return  rowDt

Я бы хотел, чтобы эта функция возвращала int, нокажется, что это дает мне float.

Я видел эту ссылку , и попробовал следующий код:

return  pa.to_numeric(rowDt)

Но, это не помогло мне.Также объект rowDT не имеет .astype(<type>).

Как преобразовать массив int?

Ответы [ 2 ]

1 голос
/ 27 марта 2019

Вы создаете полную (np.full) матрицу np.nan, которая содержит число с плавающей запятой dtype.Это означает, что вы начинаете с матрицы, определенной для хранения чисел с плавающей точкой, а не целых чисел.

Чтобы это исправить, укажите полную матрицу с целым числом 0 в качестве начального значения.Таким образом, dtype вашего массива будет np.int, и нет необходимости в astype или приведении типов.

rowDt = np.full((80,20), 0)

Если вы все еще хотите удерживать np.nan в своей матрице, тогдаБоюсь, вы не можете использовать для этого пустые массивы.Вы либо удерживаете все целые числа, либо все с плавающей точкой.

0 голосов
/ 28 марта 2019

Вы можете использовать numpy.ma.masked_array() для создания массива numpy mask

Массив с маскировкой «запоминает», какие элементы «маскированы». Он предоставляет методы и функции, аналогичные тем, которые используются для массивов numpy, но исключая маскированные значения из вычислений (например, mean()).

Если у вас есть замаскированный массив, вы всегда можете замаскировать или снять маску с определенных элементов, строк или столбцов элементов в любое время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...