Mit Pandas einzelne Zeilen überspringen

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Samoth
User
Beiträge: 41
Registriert: Freitag 24. November 2017, 15:13

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
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

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
Samoth
User
Beiträge: 41
Registriert: Freitag 24. November 2017, 15:13

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?
Samoth
User
Beiträge: 41
Registriert: Freitag 24. November 2017, 15:13

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ß
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

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?
Samoth
User
Beiträge: 41
Registriert: Freitag 24. November 2017, 15:13

;) 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 ;)
Antworten