使用masking更改数组中的字符串

时间:2018-01-04 22:48:17

标签: python numpy

我有一个如下所示的数组:

a = [['3','4','5','gg','5','6','7'],
     ['3','ww','6','7','4','2','3']]

是否有一种智能方法可以将非数字元素转换为0?

2 个答案:

答案 0 :(得分:2)

如果它是嵌套的Python list

[list(map(lambda x:0 if type(x)== str else x,a1)) for a1 in a]
Out[35]: [[3, 4, 5, 0, 5, 6, 7], [3, 0, 6, 7, 4, 2, 3]]

如果是np.array 因为你改变了你的问题

s = lambda x: x.isalpha()
func = np.vectorize(s)
a[func(a)]='0'
a=a.astype(int)
a
Out[55]: 
array([[3, 4, 5, 0, 5, 6, 7],
       [3, 0, 6, 7, 4, 2, 3]])

答案 1 :(得分:0)

numpy有一个方法np.core.defchararray.isdigit,用于检查字符串是否仅由数字组成。

b = np.array([['3','4','5','gg','5','6','7'],
              ['3','ww','6','7','4','2','3']])

np.core.defchararray.isdigit(b)

Out: array([[ True,  True,  True, False,  True,  True,  True],
            [ True, False,  True,  True,  True,  True,  True]], dtype=bool)

将此项与np.where一起使用,即可获得所需的输出。

np.where(np.core.defchararray.isdigit(b), b, "0")

Out: array([['3', '4', '5', '0', '5', '6', '7'],
            ['3', '0', '6', '7', '4', '2', '3']], dtype='<U2')

参考

numpy.core.defchararray.isdigit