Ich mache ein Paket, das eine Binärdatei liest und Daten, die verwendet werden, um eine DataFrame
initialisieren kann, frage ich mich jetzt, ob es am besten ist, eine zurückzugeben dict
oder zwei Listen (eine, die die Schlüssel enthält und eine, die die Werte enthält).Speicherauslastung, Füllung Pandas DataFrame mit Dict vs mit Schlüssel-und Wertlisten
Das Paket, das ich mache, sollte nicht vollständig auf ein Objekt DataFrame
angewiesen sein, weshalb mein Paket derzeit die Daten als dict
(für einfachen Zugriff) ausgibt. Wenn es einige Speicher- und Geschwindigkeitseinsparungen geben könnte (was für meine Anwendung von größter Bedeutung ist, da es sich um Millionen von Datenpunkten handelt), möchte ich stattdessen die Schlüssel- und die Werteliste ausgeben. Diese Iterables würden dann verwendet werden, um eine DataFrame
zu initialisieren.
Hier ist ein einfaches Beispiel:
In [1]: d = {(1,1,1): '111',
...: (2,2,2): '222',
...: (3,3,3): '333',
...: (4,4,4): '444'}
In [2]: keyslist=[(1,1,1),(2,2,2),(3,3,3),(4,4,4)]
In [3]: valslist=['111','222','333','444']
In [4]: import pandas as pd
In [5]: dfdict=pd.DataFrame(d.values(), index=pd.MultiIndex.from_tuples(d.keys(), names=['a','b','c']))
In [6]: dfdict
Out[6]:
0
a b c
3 3 3 333
2 2 2 222
1 1 1 111
4 4 4 444
In [7]: dflist=pd.DataFrame(valslist, index=pd.MultiIndex.from_tuples(keyslist, names=['a','b','c']))
In [8]: dfpair
Out[8]:
0
a b c
1 1 1 111
2 2 2 222
3 3 3 333
4 4 4 444
Es ist mein Verständnis, dass d.values()
und d.keys()
eine neue Kopie der Daten zu schaffen. Wenn wir die Tatsache ignorieren, dass die a dict
mehr Speicher als eine list
nimmt, führt die Verwendung von d.values()
und d.keys()
zu mehr Speicherverbrauch als die list
Paarimplementierung?
Warum nicht stattdessen numpige Arrays verwenden? Sie haben einen viel geringeren Speicherbedarf als Listen und Wörterbücher. –
Ich benutze keine numpy, da ich die Größe der Daten nicht kenne, also muss ich eine Liste oder ein dict auffüllen und dann ein numpy Array oder Pandas Dataframe initialisieren. – snowleopard
Ich schreibe einen Benchmark der Speicherbelegung von Listen vs dicts –