einlesen einer speziellen datei

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
ch_neu
User
Beiträge: 9
Registriert: Freitag 20. Oktober 2017, 09:01

Hallo,

ich komme leider grad gar nicht weiter mit dem Einlesen einer Datei und wollte mal für eien elegante Lösung dafür bei euch nachfragen.

Habe sie mal hier angefügt sollte man die Datei brauchen.
https://drive.google.com/open?id=1TwxbX ... Bro2fcoAz7

In 4 Spalten sind verschiedene Messwerte gespeichert.

Wenn ich versuche die Datei mit

Code: Alles auswählen

messwerte = np.loadtxt(datafile, skiprows=2, usecols=[0,3],dtype=str)
einzulesen bekomme ich einen recht komischen Vektor in der Art:

Code: Alles auswählen

array([["b'930,000'", "b'10,794'"],
       ["b'930,010'", "b'2,717'"],
       ["b'930,020'", "b'11,334'"],
       ..., 
       ["b'999,980'", "b'25,289'"],
       ["b'999,990'", "b'-3,318'"],
       ["b'1000,000'", "b'12,085'"]], 
      dtype='<U11')
damit kann ich dann nicht wirklich was anfangen.

Auch habe ich bereits

Code: Alles auswählen

messwerte=np.genfromtxt(datafile,skip_header =2,delimiter='\t', dtype=str)
versucht. Funktioniert auch wunderbar, nur habe ich dann das Problem, dass ich die Strings nicht in eine float Zahl umwandeln kann. Dafür müsste ich die , mit . im array ersetzen, leider habe ich keine brauchbare und schöne Lösung (mit einer Schleife würde ich es schon schaffen, nur muss das doch besser gehen) dafür finden können bis jetzt.

Könnt ihr mir da bitte weiterhelfen?!

lg
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@ch_neu: dafür kennt loadtxt den converters-Parameter

Code: Alles auswählen

def tofloat(s):
    return float(s.replace(',', '.'))

messwerte = np.loadtxt(datafile, skiprows=2, usecols=[0,3], converters={0:tofloat, 3:tofloat})
ch_neu
User
Beiträge: 9
Registriert: Freitag 20. Oktober 2017, 09:01

@Sirius3
Danke für die Hilfe. Wenn ich das so mache erhalte ich aber immer:

Code: Alles auswählen

  File "E:/....", line 36, in tofloat
    return float(s.replace(',', '.'))

TypeError: a bytes-like object is required, not 'str'
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Der Fehler entsteht in replace(). Wenn du dort s.replace(b',', b'.') reinschreibst, dann sollte es klappen.
ch_neu
User
Beiträge: 9
Registriert: Freitag 20. Oktober 2017, 09:01

super. danke. :-)
Antworten