Chr*_*isB 8 python numpy nan type-conversion coercion
考虑数组
x = np.array(['1', '2', 'a'])
绑定转换为float数组会引发异常
x.astype(np.float)
ValueError: could not convert string to float: a
Run Code Online (Sandbox Code Playgroud)
numpy是否提供了任何有效的方法将其强制转换为数值数组,用NAN之类的东西替换非数字值?
或者,是否有一个有效的numpy函数np.isnan,但它也测试非字母元素,如字母?
unu*_*tbu 12
您可以使用以下命令将字符串数组转换为浮点数组(使用NaN)np.genfromtxt:
In [83]: np.set_printoptions(precision=3, suppress=True)
In [84]: np.genfromtxt(np.array(['1','2','3.14','1e-3','b','nan','inf','-inf']))
Out[84]: array([ 1. , 2. , 3.14 , 0.001, nan, nan, inf, -inf])
Run Code Online (Sandbox Code Playgroud)
这是一种识别"数字"字符串的方法:
In [34]: x
Out[34]:
array(['1', '2', 'a'],
dtype='|S1')
In [35]: x.astype('unicode')
Out[35]:
array([u'1', u'2', u'a'],
dtype='<U1')
In [36]: np.char.isnumeric(x.astype('unicode'))
Out[36]: array([ True, True, False], dtype=bool)
Run Code Online (Sandbox Code Playgroud)
请注意,"数字"表示仅包含数字字符的unicode - 即具有Unicode数值属性的字符.它不包括小数点.所以u'1.3'不被认为是"数字".
如果你碰巧也在使用pandas,你可以使用以下pd.to_numeric()方法:
In [1]: import numpy as np
In [2]: import pandas as pd
In [3]: x = np.array(['1', '2', 'a'])
In [4]: pd.to_numeric(x, errors='coerce')
Out[4]: array([ 1., 2., nan])
Run Code Online (Sandbox Code Playgroud)