Sto lavorando con file abbastanza grandi (pytables) e sto riscontrando problemi con Memory Error
quando provo a caricare i dati per l'elaborazione.
Vorrei alcuni suggerimenti su come evitare questo nei miei python 32bit, dal momento che sto lavorando su panda e pytables e non so come dividere i dati in piccoli pezzi.
La mia preoccupazione arriva anche quando, se riesco a dividere i dati, come calcolare statistiche come media, std, ecc senza l'intero elenco o array, ecc.
Questo è un esempio del codice che sto usando ora, questo funziona bene con le tabelle di piccole dimensioni:
def getPageStats(pathToH5, pages, versions, sheets):
with openFile(pathToH5, 'r') as f:
tab = f.getNode("/pageTable")
dversions = dict((i, None) for i in versions)
dsheets = dict((i, None) for i in sheets)
dpages = dict((i, None) for i in pages)
df = pd.DataFrame([[row['page'],row['index0'], row['value0'] ] for row in tab.where('(firstVersion == 0) & (ok == 1)') if row['version'] in dversions and row['sheetNum'] in dsheets and row['pages'] in dpages ], columns=['page','index0', 'value0'])
df2 = pd.DataFrame([[row['page'],row['index1'], row['value1'] ] for row in tab.where('(firstVersion == 1) & (ok == 1)') if row['version'] in dversions and row['sheetNum'] in dsheets and row['pages'] in dpages], columns=['page','index1', 'value1'])
for i in dpages:
m10 = df.loc[df['page']==i]['index0'].mean()
s10 = df.loc[df['page']==i]['index0'].std()
m20 = df.loc[df['page']==i]['value0'].mean()
s20 = df.loc[df['page']==i]['value0'].std()
m11 = df2.loc[df2['page']==i]['index1'].mean()
s11 = df2.loc[df2['page']==i]['index1'].std()
m21 = df2.loc[df2['page']==i]['value1'].mean()
s21 = df2.loc[df2['page']==i]['value1'].std()
yield (i,m10, s10), (i,m11, s11), (i,m20,s20), (i,m21,s21))
Come puoi vedere, sto caricando tutti i dati necessari in un DataFrame di Pandas per processarlo, solo la media e lo standard adesso.
Questo è abbastanza veloce, ma per un pasticcio con 22Milioni di righe ottengo Memory Error