2017-06-30 59 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

謝謝!我已經相應地修改了答案。 –