使用ast.literal_eval()评估复杂表达式

时间:2017-06-30 16:50:01

标签: python arrays string python-3.x numpy

我正在运行python 3.5并尝试将大量字符串转换为numpy数组。

我使用answer from stack overflow将此代码放在一起。

import ast
import numpy as np
str = '["8.4","4.3E-7"]'
arr = ast.literal_eval(str)
x = np.array(arr, dtype='|S4')
y = x.astype(np.float32)

我收到了以下值错误

ValueError: could not convert string to float: '4.3E'

str是一个示例字符串,大多数数字都没有E-something模式,但偶尔会发生这种情况,我的代码会挂断。

在这种情况下有没有办法将字符串转换为numpy数组?

1 个答案:

答案 0 :(得分:2)

您的输入包含数字(4.3E-7)的6个字符的长字符串表示形式,但您告诉numpy最多只导入4个字符。将dtype='|S4'更改为dtype='|S6',或者确实将其完全删除,让numpy找出字符串的长度。另外,请务必避免覆盖str以避免头痛!

import ast
import numpy as np
s = '["8.4","4.3E-7"]' # don't overwrite str!
arr = ast.literal_eval(s)
x = np.array(arr) # changed length
y = x.astype(np.float32)