2017-06-30 7 views
1

Ich führe Python 3.5 und versuche, eine große Zeichenfolge in ein numpy Array zu konvertieren.Auswerten komplexer Ausdrücke mit ast.literal_eval()

Ich habe die answer from stack overflow verwendet, um diesen Code zusammen zu setzen.

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) 

Ich erhalte die folllowing Wert Fehler

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

str ist ein Beispiel Zeichenfolge, die meisten der Zahlen haben E-etwas-Muster nicht, aber gelegentlich dies geschieht, und mein Code auflegt.

Gibt es eine Möglichkeit, in diesem Fall eine Zeichenfolge in ein numpy Array zu konvertieren?

+1

'| S4' ist eine maximale Länge von 4 Zeichen. Du hast nicht genug Platz gegeben. – user2357112

+0

Sie müssen den dtype jedoch überhaupt nicht angeben. Es wird für dich abgeleitet werden. (Ich werde diese andere Antwort bearbeiten, um Dinge zu klären.) – user2357112

+0

@ user2357112 Wenn Sie nur eine Antwort posten, kann ich offiziell akzeptieren akzeptieren. Danke für die Antwort ... es stellt sich heraus, dass es eine Menge zu lernen gibt von dieser Community :) – akhileshsk

Antwort

2

Ihre Eingabe enthält eine 6 Zeichen lange Zeichenfolge einer Zahl (4.3E-7), aber Sie geben numpy an, nur bis zu 4 Zeichen zu importieren. Ändern Sie die dtype='|S4' in dtype='|S6', oder in der Tat entfernen Sie es vollständig und lassen Sie numpy die Länge der Saiten herausfinden. Stellen Sie außerdem sicher, dass Sie nicht überschreiben str, um Kopfschmerzen auf der ganzen Linie zu vermeiden!

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

Es ist einfacher den dtype Specifier komplett zu entfernen und NumPy herauszufinden wie viel Platz die Strings benötigen. – user2357112

+0

danke! Ich habe die Antwort entsprechend geändert. –