Dezimaltrenner beim Einlesen einer CSV-Datei ändern

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Mitti
User
Beiträge: 4
Registriert: Mittwoch 29. Juli 2009, 12:20

Hallo,

ich habe eine csv-Datei in der als Dezimaltrenner statt Punkten Kommata verwendet werden.

Die Datei sieht also folgendermaßen aus (Komma ist hier der Dezimaltrenner!)

#Spalte 1 Spalte 2 Spalte 3 ... Spalte 10
Person A 12,3 534,2 58,3 ...
Person B 534,2 1,2 6453,3 ...
usw.

Ich möchte diese Datei (bzw. einige Spalten daraus) mit loadtext aus dem numpy-Modul einlesen.

Code: Alles auswählen

import numpy
dateiname = "C://test.txt"
matrix = numpy.loadtxt(test, skiprows=1, converters={2:???, 4:???, 5:???}, usecols=(2,4,5))
Dort wo die Fragezeichen stehen bin ich hilflos. Im Prinzip sollte es ja möglich sein mit Hilfe von converters die Ersetzung "Punkt statt Komma" zu machen, aber ich werde aus der Dokumentation über den Gebrauch nicht ganz schlau. Kann mir da jemand von Euch weiterhelfen?

Danke
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

EDIT (Problem leider falsch verstanden):
Du musst halt einfach deine eigene Konverter Funktion angeben, die einen Wert entgegennimmt und wieder zurückgibt.
Zuletzt geändert von nemomuk am Mittwoch 29. Juli 2009, 13:25, insgesamt 1-mal geändert.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Code: Alles auswählen

...
def string2float(value):
    value = value.replace(',','.')
    return float(value)

...
matrix = numpy.loadtxt(test, skiprows=1, 
                 converters={2:string2float, 4:string2float, 5:string2float}, 
                 usecols=(2,4,5))

@Schneider...: Les mal genau, was er will. Nämlich nicht den Delimiter.
Mitti
User
Beiträge: 4
Registriert: Mittwoch 29. Juli 2009, 12:20

Danke *Brett vorm Kopf hatte*, das funktioniert.
Übrigens sogar, wenn man die Umwandlung in float weglässt, was natürlich unsauber ist.[/code]
Antworten