Ich habe ein Skript, das alle CSV-Dateien in einem Verzeichnis und verbindet sie nebeneinander, mit einem äußeren Join. Das Problem ist, dass mein Computer verschluckt (MemoryError), wenn ich versuche, es für die Dateien zu verwenden, die ich beitreten muss (ungefähr zwei Dutzend Dateien von jeweils 6-12 GB). Ich bin mir bewusst, dass Iertools verwendet werden können, um Loops effizienter zu machen, aber ich bin mir nicht sicher, ob und wie es auf diese Situation angewendet werden könnte. Die andere Alternative, an die ich denken kann, ist, mySQL zu installieren, die Grundlagen zu lernen und dies dort zu tun. Natürlich mache ich das lieber in Python, wenn es möglich ist, weil ich es bereits lerne. Eine R-basierte Lösung wäre ebenfalls akzeptabel.Effiziente Zusammenführung für viele große CSV-Dateien
Hier ist mein Code:
import os
import glob
import pandas as pd
os.chdir("\\path\\containing\\files")
files = glob.glob("*.csv")
sdf = pd.read_csv(files[0], sep=',')
for filename in files[1:]:
df = pd.read_csv(filename, sep=',')
sdf = pd.merge(sdf, df, how='outer', on=['Factor1', 'Factor2'])
Ratschläge, wie dies auch mit Dateien zu tun groß für Speicher meines Computers würde sehr geschätzt werden.
, die eine Reihe von Fehlern warf, die erste war: 'Linie 2885, in run_code exec (code_obj, self.user_global_ns, self.user_ns)' – Thoughtcraft
going csv -> hdf5 -> csv auf die Dateigrößen Sie ' Re Umgang mit wird einige Zeit dauern, ja? Ich würde versuchen, csv -> csv gehen, wenn ich könnte – Kosch
Nicht wahr. HDF5 ist in meinen Tests mindestens 10 mal schneller als csv. Weiter erwähnt das OP nicht, dass die Ausgabe in csv sein sollte. Jede andere Implementierung wird einen ziemlich komplizierten Algorithmus mit Schleifen benötigen, da jede Datei, mit der OP zu tun hat, 6-12 GB groß ist. Wenn sich OP also nicht auf einem Supercomputer befindet, ist es schwierig, so viel RAM zu haben. – Kartik