Numpy 在可能时将字符串转换为浮点数

3 投票
3 回答
5397 浏览
提问于 2025-04-30 07:33

假设我有一个列表

mix = numpy.array(['1.', '2.', 'a'])

我想知道怎么把字符串转换成浮点数,如果可以的话,这样我就能得到:

array([1., 2., 'a'])

我尝试用 try / exceptionastype(),但是它不能转换单个元素。

更新:在 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)

祝好!

撰写回答