Python 在大型数组中用零替换空值或缺少的值

Python 在大型数组中用零替换空值或缺少的值,python,arrays,numpy,replace,int,Python,Arrays,Numpy,Replace,Int,我有一个超过40000个元素的大数组 a = ['15', '12', '', 18909, ...., '8989', '', '90789', '8'] 我正在寻找一种简单的方法,将空的“”值替换为“0”,以便可以使用Numpy操作数组中的数据 然后,我将使用 a = map(int, a) 这样我就可以在numpy中找到数组的平均值 a_mean = np.mean(a) 我的问题是,我无法在缺少数字的数组中转换为整数来获得平均值 如果我对你的理解正确,那么应该是这样的: for i

我有一个超过40000个元素的大数组

a = ['15', '12', '', 18909, ...., '8989', '', '90789', '8']
我正在寻找一种简单的方法,将空的“”值替换为“0”,以便可以使用Numpy操作数组中的数据

然后,我将使用

a = map(int, a)
这样我就可以在numpy中找到数组的平均值

a_mean = np.mean(a)

我的问题是,我无法在缺少数字的数组中转换为整数来获得平均值

如果我对你的理解正确,那么应该是这样的:

for index in range(len(a)):
    if a[i] is '':
       a[i] = '0'
您还可以使用:

a = list(map(lambda x: '0' if x == '' else x, a))

更详细的回答是:

acc = 0
for v in a:
    acc+=int(v or 0)
a_mean = acc/len(a)

从之前的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.]])

您可以制作一个小函数,精确地转换单个值,例如:

def to_int(x):
    try:
        return int(x)
    except ValueError:
        return 0
可与
地图一起使用

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])
或在生成器表达式中直接创建numpy数组:

In [27]: np.fromiter((to_int(x) for x in a), dtype=int)
Out[27]: array([   15,    12,     0, 18909,  8989, 90789,     8])

您可以这样做:
new\u a=[int(v或0)表示a中的v]
然后使用
new\u a
?我相信您可以使用
numpy.nan\u to\u num
?谢谢,这是解决我问题的简单而干净的方法。