5

我有一个 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),但我怀疑空字符串会导致转换出现问题。

4

3 回答 3

18

如果您的数组是 t:

t[t=='']='0'

然后转换它。

解释:

t==''t创建一个布尔数组,其形状与具有 True 值的形状相同,其中对应的t值是一个空格。然后使用这个布尔数组'0'仅分配给原始t.

于 2013-04-10T21:30:37.287 回答
6

这是一种使用 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,也可能更难推理。

于 2013-04-10T21:32:39.233 回答
5

只需先这样做:

s = np.array(['1', '0', ''])
s[s==''] = '0'

s.astype(float)
#array([ 1.,  0.,  0.])
于 2013-04-10T21:31:06.240 回答