Python pandas DataFrame aus der ersten und letzten Zeile der csv
All -
Ich bin auf der Suche zum erstellen eines pandas DataFrame aus nur die ersten und letzten Zeilen einer sehr großen csv. Der Zweck dieser übung ist es, in der Lage sein, um leicht greifen einige Attribute aus dem ersten und letzten Einträge in diesen csv-Dateien. Ich habe kein problem, greift die erste Zeile der csv-Verwendung:
pd.read_csv(filename, nrows=1)
Habe ich auch kein problem, greifen Sie in der letzten Zeile einer text-Datei in verschiedenen weisen, wie:
with open(filename) as f:
last_line = f.readlines()[-1]
Jedoch, diese beiden Dinge in einem einzigen DataFrame hat mich geworfen, für eine Schleife. Jede Einsicht in das, wie am besten, um dieses Ziel zu erreichen?
BEARBEITEN HINWEIS: ich versuche, um diese Aufgabe ohne das laden aller Daten in einem einzigen DataFrame zuerst wie ich bin den Umgang mit ziemlich großen (>15MM Zeilen) csv-Dateien.
Dank!
- können Sie zeigen die Schritte, die Sie unternommen haben, versuchen Sie diese zwei Dinge in einer einzigen DataFrame? und was ist der Fehler, den Sie haben
- der erste Schnipsel erfolgreich greift die erste Zeile und setzt es in ein DataFrame. Das zweite snippet schnappt sich die Letzte Zeile, aber es fehlt-Header, so bin ich nicht in der Lage, erstellen Sie ein neues DataFrame und verwenden Sie eine einfache Verkettung zu verbinden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie einfach
head
undtail
undconcat
. Sie können sogar passen Sie die Anzahl der Zeilen.Ergebnis:
Einstellen
head
undtail
zu nehmen, die in 5 Zeilen von oben und 10 von unten...Ein möglicher Ansatz, die verwendet werden können, wenn Sie nicht wollen, zu laden, die gesamte CSV-Datei als ein dataframe ist, Sie zu verarbeiten, als CSVs allein. Der folgende code ist ähnlich zu Ihrem Ansatz.
Ergebnis ist das gleiche, außer für die index. Getestet gegen eine million Zeilen und bearbeitet wurde in einem von einem zweiten.
Wie skaliert werden, gegenüber 15 Millionen Zeilen, vielleicht ist das dein Ballspiel jetzt.Also beschloss ich, testen Sie gegen genau 15,728,626 Zeilen und die Ergebnisse scheinen gut genug.
skiprows
. Scheint, manchmal ist es wirklich gut zu fallen, zurück zum guten alten standard-library-Module. Viel Glück!top
verbessern würde die Zeit mehr. Jedoch, mir scheint, ich habe irgendwo gelesen, dassnrows
Stoppt das Lesen nach der Anzahl der Zeilen erreicht ist, so kann es optimiert werden gut genug, um zu Lesen von oben.Also die Art und Weise, dies zu tun, ohne zu Lesen in die ganze Datei in Python erste ist, greifen die erste Zeile, dann Durchlaufen Sie die Datei in der letzten Zeile. Dann nutzen Sie StringIO zu saugen, Sie in Pandas. Vielleicht so etwas wie dieses:
Du willst diese Antwort https://stackoverflow.com/a/18603065/4226476 - nicht die akzeptierte Antwort, aber die beste, denn Sie sucht rückwärts nach dem ersten newline anstatt zu raten.
Dann wickeln Sie die zwei Linien in einem StringIO:
Dies ist die beste Lösung, die ich gefunden