Seite 1 von 1
Numpy Array oder Pandas DataFrame
Verfasst: Montag 2. März 2015, 14:55
von scandium
Hallo Zusammen,
nach dem Einlesen einer ASCII Datei, kann ich die Daten in Form eines Numpy Arrays aufbauen.
Zusätzlich zu der mxn Matrix, benötige ich jedoch eine Spalte mit Informationen in Form Strings.
Bisher habe ich eine Matrix(a) mit den Float64 Werten und einen Vector(b) mit 'numpy.str'.
Verbinde ich beide Matrizen mit "np.hstack((a,b))" bekomme ich Matrix mit String Werten.
Gibt es eine Möglichkeit eine Matrix zu erzeugen, die weiterhin Float + Strings hat.
Oder schreibt man die Daten besser in ein Pandas DataFrame und rechnet dann damit?
Re: Numpy Array oder Pandas DataFrame
Verfasst: Montag 2. März 2015, 15:21
von MagBen
Du kannst in Numpy neben den vordefinierten dtypes auch selbstdefinierte zusammengesetzte dtypes haben:
http://docs.scipy.org/doc/numpy/referen ... nstructing
Ich würde das aber so nicht machen. Das String- und das Float Array gehören zwar zusammen, enthalten aber unterschiedliche Daten. Die wohl auch unterschiedlich weiterverarbeitet werden sollen. Deshalb würde ich sie nicht umständlich in das gleiche Array pressen, sondern die Zusammengehörigkeit über eine Klasse realisieren.
Pandas würde ich dann nehmen, wenn es sich um Zeitreihen handelt.
Re: Numpy Array oder Pandas DataFrame
Verfasst: Montag 2. März 2015, 15:41
von Sirius3
@scandium: Man kann unterschiedliche Datentypen in ein numpy-array packen, wobei man die einzelnen Felder per Namen anspricht, z.B:
Code: Alles auswählen
with open('data.txt') as input:
data = numpy.genfromtxt(input, delimiter=';', dtype=[('name','|S60'),('values','99d')])
print data['name']
print data['values']
Re: Numpy Array oder Pandas DataFrame
Verfasst: Mittwoch 4. März 2015, 14:12
von scandium
@Sirius3:
Ich habe probiert dein Beispiel laufen zu lassen. Dafür habe ich eine txt Datei erzeugt die wie folgt aussieht:
data.txt:
hx1,1
hx2,2
hx3,3
hx4,4
dann habe ich das Script laufen lassen:
Code: Alles auswählen
import numpy as np
with open('data.txt') as input:
data = np.genfromtxt(input, delimiter=',', dtype=[('name','|S60'),('values','99d')])
Leider bekomme ich folgende Fehlermeldung:"TypeError: Can't convert 'bytes' object to str implicitly"
Was müsste ich korrigieren, damit das Script läuft?
Re: Numpy Array oder Pandas DataFrame
Verfasst: Mittwoch 4. März 2015, 14:37
von MagBen
Ich denke die '99d' sind bei Deinem Beispiel falsch. '99d' bedeutet, dass da 99 Double Werte (64bit Floats) kommen sollen. Bei Dir in der Testdatei kommt danach aber nur 1 Zahl. Probier das mal:
Code: Alles auswählen
import numpy as np
data = np.genfromtxt('data.txt', delimiter=',', dtype=[('name','|S60'),('values','1d')])
print( data['name'])
print( data['values'])
Das Öffnen und Schließen der Datei kannst Du übrigens Numpy machen lassen. Auch würde ich in der Regel eher numpy.loadtxt nehmen, es sei denn ich brauche die Funktionalität von numpy.genfromtxt um fehlende oder fehlerhafte Daten zu handeln.
Re: Numpy Array oder Pandas DataFrame
Verfasst: Montag 9. März 2015, 14:06
von scandium
@MagBen,
Danke, jetzt funktioniert das Skript.
Könnte man die Matrix "data" auch von 4x1 auf 4x2 ändern?
In der zweiten Spalte hätte ich gerne die Werte nach den Komma, in dem Fall Interger, so dass man gleich mit dem eingelesenen Werten rechnen kann.