Seite 1 von 1

Mit Pandas einzelne Zeilen überspringen

Verfasst: Mittwoch 21. Februar 2018, 15:01
von Samoth
Hallo,
Ich möchte verschiedene Zeilen beim Einlesen überspringen.

Die unerwünschten Zeilen habe ich nun extrahiert:

Code: Alles auswählen

In [19]: headerline
Out[19]: [0, 108, 220, 298, 388, 490, 573, 683]
In der Pandas.read_csv habe ich da etwas von Skiprows gelesen:

Code: Alles auswählen

temp=pandas.read_csv(datapath, delimiter=' ', skiprows=headerline, hheader=None)
leider geht das so nicht. Fehlermeldung:

Code: Alles auswählen

ParserError: Error tokenizing data. C error: Expected 18 fields in line 3, saw 20

Re: Mit Pandas einzelne Zeilen überspringen

Verfasst: Mittwoch 21. Februar 2018, 16:22
von noisefloor
Hallo,

`skiprows`ist schon richtig, auch das du eine Liste übergibtst.

Entweder hast du die verzählt oder in der besagten Zeile liegt noch ein anderer Fehler vor.

Gruß, noisefloor

Re: Mit Pandas einzelne Zeilen überspringen

Verfasst: Mittwoch 21. Februar 2018, 16:44
von Samoth
Und ist es auch so das CSV read nach nrows zeilen aufhört?

wenn ja dann müsste es so stimmen, dennoch gibt er mir das falsch zurück.

Die 0 Zeile und die 108 will ich rauslassen. Dazwischen alles einlesen. Demzufolge lese ich 106 Zeilen ein.

temp=pandas.read_csv(datapath, delimiter=' '. skiprows=0, nrows=107, header=0)

ODer?

Re: Mit Pandas einzelne Zeilen überspringen

Verfasst: Mittwoch 21. Februar 2018, 17:12
von Samoth
So jetzt geht's

temp=pandas.read_csv(datapath, sep='\s*\^', skiprows=1, nrows=read_nrow ,header=None)

Ich habe nur noch ein Problem. Nun ist das in manchen Reihen ein B und ein A integriert ist.
z.B.:
20 -9999 1850 -9999 -531B-9999 160 -9999 -9999
20 -9999 1770 -9999 -505A-9999 150 90 190

Dadurch fehlt das Lehrzeichen. Kann man das A und B auch noch als Delimeter verwenden?

Gruß

Re: Mit Pandas einzelne Zeilen überspringen

Verfasst: Mittwoch 21. Februar 2018, 17:40
von kbr
Samoth hat geschrieben:Dadurch fehlt das Lehrzeichen. Kann man das A und B auch noch als Delimeter verwenden?
Bei einer Separatorlänge von mehr als einem Zeichen wird dieser als Regulärer Ausdruck interpretiert, so wie Du ihn ja auch angegeben hast. Da kannst Du doch ganz einfach ausprobieren, ob Du A und B korrekt mit erfassen kannst. Das wäre allerdings ein komisches csv-Format. Bist Du sicher, dass die beiden Zeichen nicht zum Inhalt gehören?

Re: Mit Pandas einzelne Zeilen überspringen

Verfasst: Donnerstag 22. Februar 2018, 16:15
von Samoth
;) Das gehört schon dazu... allerdings interessiert mich die A und B Angabe nicht.

Das Problem ist das zur Verfügung stehende Datenformat. Neben einem Leerzeichen, sind auch zwei oder kein Lehrzeichen vorhanden. Da ich es allerdings lediglich zur Auswertung brauche und die Klassifiezierung in der Hinsicht keinen Mehrwert gibt kann ich die der einfachthalber als Delimeter verwenden.

Der Befehl \B hinter das \s* zu setzen hat da leider nicht funktioniert.

Habe jetzt den Editor geöffnet und alle A und B's als Leerzeichen ersetzt... Jetzt habe ich das was ich möchte. Ist zwar nicht schön, aber ich habe meinen Plot ;)