2013-06-07 12 views
7

Immagino che questa domanda abbia bisogno di alcune informazioni sull'implementazione di concat.è Pandas concat una funzione sul posto?

Dire, ho 30 file, 1 G ciascuno, e posso usare solo fino a 32 G di memoria. Ho caricato i file in un elenco di DataFrames, chiamato 'list_of_pieces'. Questo elenco_di_pieces dovrebbe avere dimensioni di ~ 30G, giusto?

se faccio 'pd.concat (list_of_pieces)', concat alloca un altro 30G (o forse 10G 15G) nell'heap e fa alcune operazioni, o esegue la concatation 'in-place' senza allocare nuova memoria?

qualcuno lo sa?

Grazie!

+1

Non penso * è al suo posto ... per inciso, non penso che tu voglia davvero leggere tanto in memoria (non lascerai molto spazio per fare calcoli)! Penso che [negozio HDF5] (http://pandas.pydata.org/pandas-docs/stable/io.html#hdf5pytables) sia una scelta molto migliore per te. –

+0

@AndyHayden, temo di aver bisogno di quella dimensione di dati in memoria, ho bisogno di alcune analisi interattive su di loro :-( –

risposta

7

La risposta è no, questa non è un'operazione sul posto; np.concatenate viene usato sotto il cofano, vedere qui: Concatenate Numpy arrays without copying

Un approccio migliore al problema è scrivere ciascuno di questi pezzi ad una tabella HDFStore, vedere qui: http://pandas.pydata.org/pandas-docs/dev/io.html#hdf5-pytables per documenti, e qui: http://pandas.pydata.org/pandas-docs/dev/cookbook.html#hdfstore per alcune ricette.

Quindi è possibile selezionare qualsiasi porzioni (o anche l'intero set) come necessario (da query o addirittura riga numero)

Alcuni tipi di operazioni possono anche essere eseguite quando i dati su disco: https://github.com/pydata/pandas/issues/3202?source=cc, e qui: http://pytables.github.io/usersguide/libref/expr_class.html#