Numpy 在可能时将字符串转换为浮点数
假设我有一个列表
mix = numpy.array(['1.', '2.', 'a'])
我想知道怎么把字符串转换成浮点数,如果可以的话,这样我就能得到:
array([1., 2., 'a'])
我尝试用 try / exception
和 astype()
,但是它不能转换单个元素。
更新:在 csv
包里,有 csv.QUOTE_NONNUMERIC
,我在想 numpy
有没有类似的功能。
3 个回答
0
一种可能有效的方法是检查这个字符串是否符合数字的格式,使用正则表达式来判断。如果符合,就把它转换成浮点数(小数)。
[float(x) if re.search('[0-9]*\.?[0-9]', x) else x for x in mix]
2
对于包含不同类型数据的数组,设置 dtype=object
:
>>> mix = numpy.array(['1.', '2.', 'a'])
>>> mixed=[]
>>> for a in list(mix):
try:
mixed.append(float(a))
except:
mixed.append(a)
>>> mixed=numpy.array(mixed, dtype=object)
>>> mixed
array([1.0, 2.0, 'a'], dtype=object)
>>> type(mixed[0]),type(mixed[1]),type(mixed[2])
(<type 'float'>, <type 'float'>, <type 'numpy.string_'>)
希望这能帮到你。
5
没找到合适的函数来解决这个问题,所以我写了一些代码可以帮你实现。
def myArrayConverter(arr):
convertArr = []
for s in arr.ravel():
try:
value = float32(s)
except ValueError:
value = s
convertArr.append(value)
return array(convertArr,dtype=object).reshape(arr.shape)
祝好!