Sto usando i panda per creare un'unione outer
su un set di circa ~ 1000-2000 file CSV. Ogni file CSV ha una colonna identificativa id
che è condivisa tra tutti i file CSV, ma ogni file ha un insieme univoco di colonne di 3-5 colonne. Ci sono circa 20.000 uniche righe id
in ogni file. Tutto ciò che voglio fare è unire questi elementi, riunendo tutte le nuove colonne e utilizzando la colonna id
come indice di fusione.MemoryError su grandi si fonde con i panda in Python
lo faccio con una semplice chiamata merge
:
merged_df = first_df # first csv file dataframe
for next_filename in filenames:
# load up the next df
# ...
merged_df = merged_df.merge(next_df, on=["id"], how="outer")
Il problema è che con quasi 2000 file CSV, ho un MemoryError
nell'operazione merge
lanciata da panda. Non sono sicuro se si tratta di una limitazione dovuta a un problema nell'operazione di unione?
Il dataframe finale avrebbe 20.000 righe e approssimativamente (2000 x 3) = 6000 colonne. Questo è grande, ma non abbastanza grande da consumare tutta la memoria sul computer che sto usando che ha oltre 20 GB di RAM. Questa dimensione è troppo per la manipolazione dei panda? Dovrei usare qualcosa come sqlite invece? C'è qualcosa che posso cambiare nell'operazione merge
per farlo funzionare su questa scala?
grazie.
Come la memoria, si dovrebbe essere in grado di usare un'espressione gen invece di list comprehension ... (non sono sicuro del funzionamento interno di 'concat') – root
@root bene, il generatore può essere solo migliore penso (nel caso peggiore lo converte semplicemente in una lista) :) –
@root Good spot btw ! (tbh non sapevo che concat avrebbe accettato un generatore!) –