Ich habe eine Registerkarte getrennte Datei mit 1 Milliarde Zeilen von diesen (Imagine 200 Spalten statt 3):
%Vor%Ich möchte ein Wörterbuch erstellen, in dem die Zeichenfolge in der ersten Spalte der Schlüssel und der Rest die Werte sind. Ich habe es so gemacht, aber es ist rechenintensiv:
%Vor%Wie kann ich sonst das gewünschte Wörterbuch bekommen? Eigentlich wäre ein numpliges Array geeigneter als eine Liste von Floats für den Wert.
Sie können pandas verwenden, um das df zu laden, dann ein neues df wie gewünscht erstellen und dann to_dict
:
BEARBEITEN
Eine dynamischere Methode und eine, die die Notwendigkeit, ein temporäres df zu konstruieren, reduzieren würde:
%Vor%Weitere Aktualisierungen
Eigentlich brauchen Sie den ersten Lesevorgang nicht, die Spaltenlänge kann trotzdem implizit durch die Anzahl der Spalten in der ersten Spalte abgeleitet werden:
%Vor% Sie können die numpy.genfromtxt()
verwenden Funktion, wenn Sie die Anzahl der Spalten angeben:
Ausgabe:
%Vor% Hinweis: Um programmatisch die Anzahl von cols
zu finden, die Sie tun könnten:
Und dann num_cols
für den Parameter usecols
verwenden.
Tut mir leid, das ist nicht wirklich eine Antwort, aber zu lang für einen Kommentar.
Sie sagen, Sie haben 1 Milliarde Zeilen mit 200 Spalten Float. Es bedeutet eine minimale Erinnerung an
10 9 * 200 * 8 = 1,6 10 12 Bytes
Es gibt mehr als 1.5 G, ohne den Overhead für das Diktat zu zählen.
Natürlich können Sie numpy
-Arrays anstelle von Float-Listen verwenden, aber jedes Array ist klein (200 Elemente), also bezweifle ich stark, dass die Verstärkung wichtig ist.
IMHO, für so viele Daten sollten Sie die Ladephase nicht berücksichtigen, unabhängig davon, wie Sie die Daten verarbeiten und wenn Sie wirklich ein Wörterbuch von einer Milliarde Datensätze mit jeweils 200 Gleitkommawerten benötigen Die aktuelle Implementierung ist korrekt, genauso wie ein numpliges Array.
Sie könnten einen wichtigen Vorteil in der weiteren Verarbeitung bekommen, wenn Sie alle Daten in einem einzigen numply Array haben könnten, und numpy für den Verarbeitungsteil verwendet haben, aber ohne mehr davon zu wissen, ist es nur Spekulation.
Tags und Links python csv dictionary numpy pandas