将带有标题的numpy数组转换为float

时间:2014-11-27 16:08:25

标签: python arrays numpy

我想使用函数.astype(float)将名为Defocus_Array的数组转换为float。但我得到了这个错误。

>>> Defocus_Array.astype(float)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: could not convert string to float: defocus

我理解&#34; defocus&#34;提取的数据的名称是问题。我尝试使用numpy.delete删除它,但它不起作用。如何删除它以转换我的数组?或者它是转换我的数组的另一种方式?谢谢。

2 个答案:

答案 0 :(得分:1)

Defocus_Array = np.array(('123.3', '0', 'defocus'))
Defocus_Array.astype(float)  # ValueError: could not convert string to float: defocus

Defocus_Array[2] = 'nan'
Defocus_Array.astype(float)  # array([ 123.3,    0. ,    nan])

或者,更一般地说:

Defocus_Array[Defocus_Array == 'defocus'] = 'nan'
Defocus_Array.astype(float)

或者,如果您只想忽略'defocus'值:

Defocus_Array[Defocus_Array != 'defocus'].astype(float)

答案 1 :(得分:1)

你可以编写一个适用于整个数组的函数:

def safe_float(f, default=0):
    try:
        return float(f) 
    except ValueError:
        return default

print z
## ['0' '1' '2' '3' '4' '5' '6' '7' '8' '9' 'foo']
numpy.vectorize(safe_float)(z)
## array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.,  0.])