2017-06-30 49 views
1

我正在运行python 3.5并试图将大字符串转换为numpy数组。使用ast.literal_eval评估复杂表达式()

我用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) 

我收到folllowing值误差

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

str是一个字符串的话,大部分的数字不具有E-一些模式,但偶尔也会出现这种情况,我的代码挂断。

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

+1

'| S4'是最大长度为4个字符。你没有给足够的空间。 – user2357112

+0

尽管如此,您根本不需要指定dtype。它会被推断给你。 (我会去编辑其他答案来澄清事情。) – user2357112

+0

@ user2357112如果你只是发布一个答案,我可以正式接受接受。感谢您的答案,但是...结果有很多要从这个社区学习:) – akhileshsk

回答

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) 
+0

只是完全删除dtype说明符更简单,让NumPy弄清楚需要多少空间。 – user2357112

+0

谢谢!我已经相应地修改了答案。 –