Ich habe mehrere große Dateien (> 5M Zeilen von Daten), die nach einem eindeutigen Zeitstempel sortiert sind. Alle Dateien enthalten praktisch alle dieselben Zeitstempel mit Ausnahme einer Handvoll zufällig fehlender Zeilen (< 1000). Ich möchte die Daten aus allen Dateien effizient zu einem einzigen Datensatz mit einer Zeile pro Zeitstempel verbinden, vorzugsweise mit einem Generator.Python 3 Join Daten von großen Dateien, die sortiert sind
Mit Ausnahme der fehlenden Zeilen, konnte ich nur zip verwenden:
def get_data(list_of_iterables):
for data in zip(*list_of_iterables):
yield data
Da es jedoch einige fehlende Zeilen, ich brauche zippen die Daten über Zeitstempel zu verbinden, anstatt einfach. Ich kann einfach alle Zeilen ignorieren, die keine übereinstimmenden Zeitstempel in jeder Datei haben.
Gibt es eine pythonische Möglichkeit, diese Funktionalität in ein paar Zeilen zu implementieren?
Mein Ansatz wäre es, jedes iterable nacheinander zu beschleunigen, bis sein Zeitstempel nicht länger als der maximale Zeitstempel für die Gruppe der iterablen Elemente ist. Wenn alle Zeitstempel übereinstimmen, ergeben Sie eine Zeile und verschieben Sie alle Iterablen. Aber die Logik scheint chaotisch zu sein, wenn ich versuche, diesen Ansatz zu implementieren.
Bearbeiten: Leistung.
Die Implementierung muss Zeilen zurückgeben, ohne zuerst alle Daten in den Speicher einzulesen. Es dauert eine Weile, alle Daten zu lesen, und oft müssen nur die ersten paar Zeilen untersucht werden.
bitte fügen Sie einige Beispieldaten hinzu – synner
Ich würde vorschlagen, dass Sie sich Pandas ansehen (http://pandas.pydata.org/). Es hat Tools, um genau diese Art von Zusammenführung zu tun, die Sie erwähnen. – Ivan
@Ivan Ich bemerkte die Pandas-Bibliothek, als ich dieses Problem googelte. Die Bibliothek sieht für viele der Operationen, die ich mache, sehr nützlich aus. Ich verlasse mich momentan stark auf Numpy, aber ich werde Pandas untersuchen, wenn ich etwas Zeit habe. – RandomBits