2015-11-13 10 views
7

ich CSV-Dateien, die ich in Pandas lesen mit:Lesen Sie alle aber letzte Zeile der CSV-Datei in Pandas

#!/usr/bin/env python 

import pandas as pd 
import sys 

filename = sys.argv[1] 
df = pd.read_csv(filename) 

Leider ist die letzte Zeile dieser Dateien oft korrupt ist (hat die falsche Anzahl von Kommas). Zur Zeit öffne ich jede Datei in einem Texteditor und entferne die letzte Zeile.

Ist es möglich, die letzte Zeile im selben Python/Pandas-Skript zu entfernen, das die CSV lädt, um zu sparen, dass Sie diesen zusätzlichen, nicht automatisierten Schritt ausführen müssen?

+0

Sie löschten eine Frage über das Extrahieren von Zahlen, trotzdem würde ich vorschlagen, 'str.extract' zu verwenden:' für col in df.spalten [2:]: df [col] = df [col] .str.extract (r '(\ d +)'). astyp (int) ' – EdChum

+0

@EdChum Danke! – eleanora

+0

@EdChum Überschreitet Ihr Code die Dezimalstellen? – eleanora

Antwort

7

Pass error_bad_lines=False und es wird diese Zeile überspringen automatisch

df = pd.read_csv(filename, error_bad_lines=False) 

Der Vorteil error_bad_lines ist es überspringen wird und nicht bork auf irgendwelchen fehlerhaften Linien, aber wenn die letzte Zeile duff ist immer dann skipfooter=1 ist besser

Dank @DexterMorgan für den Hinweis, dass skipfooter Option zwingt die Engine, die Python-Engine zu verwenden, die langsamer ist als die c-Engine zum Parsen eines CSV.

+0

Ich hätte das sehen sollen. Vielen Dank! – eleanora

+1

In Bezug auf die Option "Skipfooter" ist es vielleicht gut zu wissen, dass es nicht mit der 'dtypes' Option funktioniert: ' ValueError: Zurück zur 'Python' Engine, weil die 'c' Engine keinen Skipfooter unterstützt, Dies führt jedoch dazu, dass 'dtype' ignoriert wird, da es von der 'python' Engine nicht unterstützt wird. (Beachten Sie, dass die Option "Konverter" ähnliche Funktionen bietet.) ' –

+0

@DexterMorgan wird sicher – EdChum

Verwandte Themen