我有超过40000个元素的大型数组
a = ['15', '12', '', 18909, ...., '8989', '', '90789', '8']
我正在寻找一种将空的''值替换为'0'的简单方法,以便可以使用Numpy操纵数组中的数据。
然后我会使用
将数组中的元素转换为整数a = map(int, a)
这样我就可以在numpy中找到数组的平均值
a_mean = np.mean(a)
我的问题是我无法在缺少数字的数组中转换为整数以获取均值。
答案 0 :(得分:4)
您可以创建一个小函数,以完全按照所需的方式转换单个值,例如:
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])
或在生成器表达式中直接创建一个numpy数组:
In [27]: np.fromiter((to_int(x) for x in a), dtype=int)
Out[27]: array([ 15, 12, 0, 18909, 8989, 90789, 8])
答案 1 :(得分:2)
如果我没看错,它应该看起来像这样:
for index in range(len(a)):
if a[i] is '':
a[i] = '0'
您还可以使用:
a = list(map(lambda x: '0' if x == '' else x, a))
答案 2 :(得分:0)
更详细的答案是:
acc = 0
for v in a:
acc+=int(v or 0)
a_mean = acc/len(a)
答案 3 :(得分:0)
从以前的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.]])