Seite 1 von 1

Dezimaltrenner beim Einlesen einer CSV-Datei ändern

Verfasst: Mittwoch 29. Juli 2009, 12:36
von Mitti
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

Verfasst: Mittwoch 29. Juli 2009, 13:23
von nemomuk
EDIT (Problem leider falsch verstanden):
Du musst halt einfach deine eigene Konverter Funktion angeben, die einen Wert entgegennimmt und wieder zurückgibt.

Verfasst: Mittwoch 29. Juli 2009, 13:24
von ms4py

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.

Verfasst: Mittwoch 29. Juli 2009, 13:45
von Mitti
Danke *Brett vorm Kopf hatte*, das funktioniert.
Übrigens sogar, wenn man die Umwandlung in float weglässt, was natürlich unsauber ist.[/code]