我有一个如下所示的数组:
a = [['3','4','5','gg','5','6','7'],
['3','ww','6','7','4','2','3']]
是否有一种智能方法可以将非数字元素转换为0?
答案 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')
参考