2016-06-20 34 views
14

Dato è un elenco di 1,5 Gb di dati di panda.che è più veloce per il caricamento: pickle o hdf5 in python

Mi chiedo quale sia un approccio migliore per gestire il caricamento di questi dati: pickle (tramite cPickle), hdf5, o qualcos'altro in python?

In primo luogo, "scaricare" i dati è OK per richiedere molto tempo, lo faccio solo una volta.

Sono anche non interessato alla dimensione del file su disco.

Domanda: Quello che mi preoccupa è la velocità di carico i dati nella memoria il più rapidamente possibile.

+7

Hai provato a misurare questo, nelle tue condizioni specifiche? – pvg

+1

Immagino che pickle sia uno dei peggiori modi per scaricare questi dati :-). Certo, è solo una supposizione. Non ho dati rigidi per il backup. A proposito di dati concreti, perché non fare un esperimento e scoprirlo? – mgilson

+0

Beh, sto postando una domanda, non una risposta, credo;) Posso testare pickle vs hdf5, ma cosa succede se un esperto in questo sito può indirizzarmi verso un metodo molto migliore che rientra in "o qualcos'altro"? :) – denvar

risposta

29

vorrei prendere in considerazione solo due formati di memorizzazione: HDF5 (PyTables) e Feather

Ecco i risultati della mia read and write comparison per il DF (forma: 4000000 x 6, dimensioni in memoria 183,1 MB, dimensioni del CSV non compressi - 492 MB).

di confronto per i seguenti formati di memorizzazione: (CSV, CSV.gzip, Pickle, HDF5 [varie compressione]):

    read_s write_s size_ratio_to_CSV 
storage 
CSV    17.900 69.00    1.000 
CSV.gzip   18.900 186.00    0.047 
Pickle    0.173  1.77    0.374 
HDF_fixed   0.196  2.03    0.435 
HDF_tab   0.230  2.60    0.437 
HDF_tab_zlib_c5 0.845  5.44    0.035 
HDF_tab_zlib_c9 0.860  5.95    0.035 
HDF_tab_bzip2_c5 2.500 36.50    0.011 
HDF_tab_bzip2_c9 2.500 36.50    0.011 

Ma potrebbe essere diverso per voi, perché tutti i miei dati erano del datetime DTYPE, quindi è sempre meglio fare un simile confronto con i tuoi dati reali o almeno con i dati simili ...

+0

Perché consideri solo HDF5 e Feather, ma non Pickle? Il tuo risultato mostra che è abbastanza buono, c'è anche sottaceto compresso. Non è una buona scelta standard? – THN

+0

@THN, Se ricordo correttamente ho visto alcuni bug in passato - non sono sicuro se sia ancora il caso ... – MaxU

+1

Pickle ha il problema che non funzionerà per file di dati molto grandi di 2-3 GB e così su frequentemente. È pensato per i piccoli dati. Anche sottaceto ha problemi di sicurezza! – AbdealiJK