f = pd.read_hdf('Sensor_Data.h5','f')
pieces = [f[x: x + 360] for x in xrange(504649)]
df = pd.concat(pieces)
Morgen alle. Ich habe eine Datei mit 500.000 Datenzeilen. Ich möchte daraus 360 Reihenscheiben nehmen und sie jeweils um 1 Reihe nach unten verschieben. (Also werde ich mit einer Menge Daten enden.)Pandas Dataframe: Mangel an Speicher - Was ist der bessere Weg hier?
Wie erwartet, habe ich den obigen Code versucht und einen Speicherfehler bekommen. Ich nehme an, es gibt einen besseren Weg, dies zu tun?
EDIT: Um etwas Kontext hinzuzufügen, ist dies eine .h5-Datei, und ich benutze Pandas Dataframe, um es auf diese Weise zu schneiden. Ich versuche, ein Array von Daten zu erstellen, um in ein tiefes neuronales Netzwerk mit Hilfe von KaffeeNet zu füttern, obwohl das Format an diesem Punkt unklar sein wird ...
Der Code funktioniert für kleine Datenmengen. Nur nicht für größere. Um klarer, was ich versuche zu tun zu: import Pandas als pd
df = pd.DataFrame(np.random.randn(10,6)); df
[zeigt eine 6 x 10 Tabelle von Zufallszahlen] Jetzt:
pieces = [df[x: x + 4] for x in xrange(7)]
f = pd.concat(pieces)
f
Diplays eine neue Tabelle ähnlich der vorherige, aber erweitert. Es hat jetzt Zeilen 0,1,2,3,1,2,3,4,2,3,4,5,3,4,5,6 ...
Jetzt "Stücke" ist kein Datenrahmen Objekt selbst, aber eine "Liste" aus irgendeinem Grund. Gibt es auch eine einfache Möglichkeit, all diese separaten Datensätze (0, 1, 2, 3), (1, 2, 3, 4) usw. in das Datenrahmenobjekt selbst zu verwandeln? (Anstelle von ihnen zusammen in einen Datenrahmen verketten
Ich hoffe, das macht Sinn
Meine bevorzugte Methode zur Verarbeitung großer Datenmengen ist die Verwendung von ['numpy.memmap'] (http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.memmap.html) . Ein Nachteil ist, dass Sie Ihre Daten in ein binäres Format konvertieren müssen, das von 'memmap' verstanden wird, aber danach können Sie problemlos mit riesigen Datensätzen arbeiten. Müssen Sie wirklich alle diese redundanten Daten für Ihre Slices speichern? Was ist die ultimative Verwendung dieser Scheiben? Vielleicht wäre es besser, einfach einen Iterator zu erstellen. –
Nun, Sie nehmen im Grunde Ihre Daten und multiplizieren mit 360, richtig? Aber dieser letzte Datenrahmen ist mit Tonnen redundanter Daten gefüllt, was sinnlos ist.Ich nehme an, Sie machen das für spätere Berechnungen? Aber es wird bessere Möglichkeiten geben, diese Berechnungen durchzuführen, als Speicher zu verschwenden. z.B. Verschieben/Erweitern von Funktionen, erweiterte (ausgefallene) Indizierung, etc. Ich vermute, was Sie tun müssen, ist darüber nachdenken, wie die Calcs zu tun, nicht, wie der Speicherabdruck zu erweitern. – JohnE
Ja, es ist für die Zwecke der späteren calcs. Ich werde die Frage bearbeiten, um ein bisschen klarer zu sein ... Was soll ich angesichts des neuen Kontexts tun? –