Am schnellsten Datei-format für read/write-Operationen mit Pandas und/oder Numpy
Ich arbeite seit einer Weile mit sehr großen DataFrames und ich habe mit dem csv-format zum speichern von Eingabedaten und der Ergebnisse. Ich habe bemerkt, dass viel Zeit ins Lesen und schreiben diese Dateien, die, zum Beispiel, dramatisch verlangsamt batch-Verarbeitung von Daten. Ich Frage mich, ob das Datei-format selbst von Bedeutung ist. Gibt es eine
bevorzugte Dateiformat für schnelleres Lesen/schreiben Pandas DataFrames und/oder Numpy-arrays?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nutzung im HDF5. Beats schreiben, flache Dateien, die Hände nach unten. Und Sie können die Abfrage. Docs sind hier
Hier ein perf Vergleich vs SQL. Aktualisiert, um zu zeigen, SQL/HDF_fixed/HDF_table/CSV schreiben und Lesen perfs.
Docs jetzt auch ein performance-Teil:
Sehen hier
Es ist immer eine gute Idee, um einige benchmarks für Ihre Anwendung. Ich habe gute Ergebnisse, die Speicherung von raw-Strukturen über numpy:
Es ist ziemlich schnell und nimmt weniger Platz auf der Festplatte. Aber: Sie müssen zum nachverfolgen der dtype die Daten neu laden, es ist nicht portabel zwischen verschiedenen Architekturen, und es unterstützt nicht die erweiterten Funktionen der im HDF5. (numpy hat ein fortgeschrittene binären format die ausgelegt ist, zu überwinden, die ersten beiden Einschränkungen, aber ich hatte noch nicht viel Erfolg daran, es zu arbeiten.)
Update: Dank für das drücken für mich zahlen. Mein benchmark zeigt, dass tatsächlich im HDF5-Gewinne, zumindest in meinem Fall. Es ist beide schneller und kleiner auf dem Datenträger! Hier ist, was ich sehe, mit dataframe von etwa 280k Zeilen, 7 Spalten float und ein string-index:
.npz
perf-Weise mit der Verwendung im HDF5?.npz
, aber es scheint einfach genug!to_hdf()
undread_hdf()
. Nur die Komplexität ist die zusätzliche Abhängigkeiten.HDF ist in der Tat eine sehr gute Wahl, können Sie auch npy - /npz mit einigen vorbehalten:
Hier ist ein benchmark, der über einen Daten-frame von 25k Zeilen und 1000 Spalten gefüllt mit random floats:
npy ist etwa 20% schneller zu schreiben und zu etwa 40% schneller zu Lesen, wenn Sie nicht Daten komprimieren.
Code verwendet, um die Ausgabe zu erzeugen über:
numpy
. Bitte können Sie erläutern, wie die Bibliothek und die dazugehörigen Methode, die Sie verwendet fürnumpy
und die Bibliothek und die Methode, die Sie verwendet fürpandas
Kürzlich pandas Hinzugefügt-Unterstützung für das Parkett-format verwenden als backend-Bibliothek
pyarrow
(geschrieben von Wes Mckinney sich selbst, mit seiner üblichen obsession für die Leistung).Müssen Sie nur installieren Sie die
pyarrow
Bibliothek und verwenden Sie die Methodenread_parquet
undto_parquet
. Parkett ist viel schneller zu Lesen und zu schreiben, für größere Datensätze (über ein paar hundert Megabyte oder mehr) und es auch halten Spur der dtype-Metadaten, so dass Sie nicht verlieren Daten geben Informationen, die beim schreiben und Lesen von der Festplatte. Es kann tatsächlich speichern mehr effizient einige Datentypen, die im HDF5 sind nicht sehr performant mit (wie strings und timestamps: im HDF5 nicht über eine native Daten-Typ für diese, so nutzt pickle serialisieren Sie, die macht, zu langsam für große Datenmengen).Parkett ist auch ein Spaltenformat, das macht es sehr einfach, zwei Dinge zu tun:
Schnell herausfiltern Spalten, die Sie nicht interessiert sind in. Mit CSV-haben Sie tatsächlich Lesen das ganze file und nur nach, dass Sie wegwerfen können Spalten, die Sie nicht wollen. Mit Parkett können Sie eigentlich Lesen Sie nur die Spalten, die Sie interessiert sind.
Abfragen filtern von Zeilen und Lesen nur, was Ihnen wichtig ist.
Andere interessante neuere Entwicklung ist die Feder Datei-format, das auch entwickelt von Wes Mckinney. Es ist im wesentlichen nur eine unkomprimierte
arrow
- format direkt auf die Festplatte geschrieben, so ist Sie potenziell schneller zu schreiben als die Parkett-format. Der Nachteil wird sein, die Dateien, die sind 2-3x größer.