Замена пустых или пропущенных значений нулями в большом массиве - PullRequest
0 голосов
/ 15 сентября 2018

У меня большой массив из более чем 40000 элементов

a = ['15', '12', '', 18909, ...., '8989', '', '90789', '8']

Я ищу простой способ замены пустых значений '' на '0, чтобы я мог манипулировать данными в массиве с помощью Numpy.

Затем я бы преобразовал элементы в моем массиве в целые числа, используя

a = map(int, a)

чтобы я мог найти среднее значение массива в numpy

a_mean = np.mean(a)

Моя проблема в том, что я не могу преобразовать в целые числа в массиве с пропущенными числами, чтобы получить среднее значение.

Ответы [ 4 ]

0 голосов
/ 15 сентября 2018

Вы можете создать небольшую функцию, которая преобразует одно значение точно так, как вы хотите, например ::

def to_int(x):
    try:
        return int(x)
    except ValueError:
        return 0

, который можно использовать с map:

In [22]: a = ['15', '12', '', 18909, '8989', '90789', '8']

map(to_int, a)
Out[23]: [15, 12, 0, 18909, 8989, 90789, 8]

в понимании списка:

In [25]: np.array([to_int(x) for x in a])
Out[25]: array([   15,    12,     0, 18909,  8989, 90789,     8])

или в выражении генератора для непосредственного создания пустого массива:

In [27]: np.fromiter((to_int(x) for x in a), dtype=int)
Out[27]: array([   15,    12,     0, 18909,  8989, 90789,     8])
0 голосов
/ 15 сентября 2018

Более подробный ответ:

acc = 0
for v in a:
    acc+=int(v or 0)
a_mean = acc/len(a)
0 голосов
/ 15 сентября 2018

Из предыдущего обучения с SO я вижу, что вы можете использовать приведенное ниже решение для преобразования NaN в нули ..

from numpy import *

a = array([[0, 1, 2], [3, 4, NaN]])
where_are_NaNs = isnan(a)
a[where_are_NaNs] = 0

во-вторых, nan_to_num(), как я уже говорил ранее в моем комментарии.

>>> import numpy as np
>>> a = array([[0, 1, 2], [3, 4, np.NaN]])
>>> a
array([[  0.,   1.,   2.],
       [  3.,   4.,  nan]])
>>> a = np.nan_to_num(a)
>>> a
array([[ 0.,  1.,  2.],
       [ 3.,  4.,  0.]])
0 голосов
/ 15 сентября 2018

Если я вас правильно понял, то это должно выглядеть так:

for index in range(len(a)):
    if a[i] is '':
       a[i] = '0'

Вы также можете использовать:

a = list(map(lambda x: '0' if x == '' else x, a))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...