Im HDF5 mehr Raum einnimmt als CSV?

Betrachten Sie das folgende Beispiel:

Vorbereiten der Daten:

import string
import random
import pandas as pd

matrix = np.random.random((100, 3000))
my_cols = [random.choice(string.ascii_uppercase) for x in range(matrix.shape[1])]
mydf = pd.DataFrame(matrix, columns=my_cols)
mydf['something'] = 'hello_world'

, Die höchstmögliche Kompression möglich, im HDF5:

store = pd.HDFStore('myfile.h5',complevel=9, complib='bzip2')
store['mydf'] = mydf
store.close()

Speichern auch in CSV:

mydf.to_csv('myfile.csv', sep=':')

Ist das Ergebnis:

  • myfile.csv ist 5,6 MB groß
  • myfile.h5 ist 11 MB groß

Den Unterschied immer größer als die Datensätze größer werden.

Ich habe versucht mit anderen Kompressions-Methoden und-Stufen. Ist das ein bug? (Ich bin mit Pandas 0,11 und die neueste stabile version von im HDF5 und Python).

  • afaik im HDF5 ist entworfen, um zu optimieren-lookup-Zeiten .. nicht die Dateigröße
  • die string-Spalten eine Feste Größe pro Spalte (das ist die max Größe aller Spalten). Lesen Sie über min_itemsize in den docs
  • siehe diese Referenz für meinen obigen Kommentar: pandas.pydata.org/pandas-docs/dev/io.html#string-columns. Zusätzlich. Ihr test ist nur mit ein bisschen Mehraufwand in im HDF5. Dies ist ein sehr strukturiertes Daten; versuchen Sie, die gleiche Sache mit 1M Reihen von Wagen und Sie werden überrascht.
  • Vielen Dank @Jeff. Ich bin immer noch im Widerspruch mit diesem. Die matrix habe ich erstellt hat 100 x 3000= 300,000 float64 - Werte und nur 100 "strings" und alle halten den gleichen Wert haben, würde ich es mir vorstellen sollte, profitieren von der Kompression. Trotzdem dauert es mehr Platz als in der CSV-Datei, auch wenn ich mit der höchsten Komprimierung möglich. Ist dies zu erwarten?
  • meine Erfahrung war die gleiche wie bei dir - im HDF5 nimmt viel mehr Platz ein als csv-Datei.
Schreibe einen Kommentar