我有一个 numpy 数组,其中每个元素看起来像这样:
['3' '1' '35' '0' '0' '8.05' '2']
['3' '1' '' '0' '0' '8.4583' '0']
['1' '1' '54' '0' '0' '51.8625' '2']
我想用一些默认值(如 0)替换所有空字符串,如上面第二行中的那些。我怎样才能用 numpy 做到这一点?
最终目标是能够运行 this: S.astype(np.float)
,但我怀疑空字符串会导致转换出现问题。
如果您的数组是 t:
t[t=='']='0'
然后转换它。
解释:
t==''
t
创建一个布尔数组,其形状与具有 True 值的形状相同,其中对应的t
值是一个空格。然后使用这个布尔数组'0'
仅分配给原始t
.
这是一种使用 map 的方法,它不会产生与调用 .astype() 相同的数据类型:
def FloatOrZero(value):
try:
return float(value)
except:
return 0.0
print map(FloatOrZero, ['3', '1', '', '0', '0', '8.4583', '0'])
输出:
[3.0, 1.0, 0.0, 0.0, 0.0, 8.4583, 0.0]
这种方法可能会让您更灵活地清理数据,但如果您想要使用 numpy.array,也可能更难推理。
只需先这样做:
s = np.array(['1', '0', ''])
s[s==''] = '0'
s.astype(float)
#array([ 1., 0., 0.])