MemoryError, wenn ich Zusammenführen von zwei Pandas Daten-frames.
Suchte ich fast alle über das internet und irgendwie keiner der Ansätze scheint zu funktionieren in meinem Fall.
Habe ich zwei große csv-Dateien (mit jeweils einer Mio+ Zeilen-und über 300-400MB groß). Sie sind be-Ordnung in die Daten-frames mit der read_csv Funktion, ohne dass das chunksize parameter.
Ich trat sogar bestimmte kleinere Operationen auf diese Daten, wie die neue Spalte generation, Filterung, etc.
Jedoch, wenn ich versuche, Sie zu verschmelzen diese beiden frames, bekomme ich eine MemoryError. Ich habe sogar versucht, die Verwendung von SQLite zu erreichen, die Zusammenführen, aber vergeblich. Der Vorgang dauert ewig.
Mir ist ein Windows 7 PC mit 8GB RAM. Die Python-version 2.7
Danke.
Edit: ich habe versucht, chunking Methoden zu. Wenn ich dies mache, habe ich nicht bekommen MemoryError, aber die RAM-Nutzung explodiert und mein system stürzt ab.
merge_df = pandas.merge(df1, df2, left_on = "Colname1", right_on = "Colname2")
Verwenden Sie eine 64-bit-version von Python?
Ja. Ich bin mit einem 64-bit-Python 2.7. Derzeit Anaconda 4.3 (mit Spyder 3) auf meinem system installiert ist.
Könnten Sie fügen die ersten paar Zeilen jedes dataframe? Chancen sind, wenn Sie zu verschmelzen, unterscheidet sich von der operation, die Sie bestimmt. (Aus meiner Erfahrung, die meisten join-Operationen mit dataframes weniger als 1 GB komplett in einer Zeitskala von Sekunden, aber natürlich hängt dies von der Art der Verknüpfung sowie die Struktur der Daten.)
InformationsquelleAutor Ronit Chidara | 2017-11-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie zum Zusammenführen von Daten mit pandas.merge wird es mit df1-Speicher, df2 Speicher und merge_df Speicher. Ich glaube, dass es ist, warum Sie bekommen einen memory-Fehler. Sollten Sie exportieren df2 in eine csv-Datei und verwenden Sie option chunksize und Zusammenführen von Daten.
Könnte es eine bessere Weise, aber Sie können versuchen, diese.
*für große Daten-set, die Sie verwenden können chunksize option in pandas.read_csv
dadurch sparen die zusammengeführten Daten als df3.
Ja, wenn Sie wollen innere Verknüpfung, die Sie brauchen nicht zu tun # speichern Daten, die nur angezeigt werden, im df1-df_result = df1[df1.Colname1.isin(df2.Colname2)!=True] df_result.to_csv("df3.csv",index_label=False, mode="a")
Ich denke, die Anweisung zum erstellen der df2.csv-Datei fehlt.
Tut mir Leid, Sie müssen nur brauchen, um zu laden "yourdata2.csv" mit chunksize option
1.Vor der Ausführung der Schleife haben Sie entlassen alle überflüssigen Objekt mit del(object)? 2. wenn ja, könnten Sie versuchen, es zu tun, indem Sie einige Zeilen von df2 und alle Zeilen von df1?*nur für den Fall für Sie sich mit der richtigen Zeile und überprüfen Sie das Ergebnis wie erwartet ist.
InformationsquelleAutor T_cat