Pandas: cadê a memória vazando aqui?
Eu enfrento o problema de vazamentos de memória usandopandas
biblioteca empython. eu criopandas.dataframe
objetos na minha classe e tenho método, que alteram o tamanho do dataframe de acordo com minhas condições. Depois de alterar o tamanho do dataframe e criar o novo objeto pandas, eu reescrevo o pandas.dataframe original na minha classe. Mas o uso de memória é muito alto, mesmo após uma redução significativa da tabela inicial. Alguns códigos para exemplos curtos (não escrevi gerenciador de processos, consulte gerenciador de tarefas):
import time, string, pandas, numpy, gc
class temp_class ():
def __init__(self, nrow = 1000000, ncol = 4, timetest = 5):
self.nrow = nrow
self.ncol = ncol
self.timetest = timetest
def createDataFrame(self):
print('Check memory before dataframe creating')
time.sleep(self.timetest)
self.df = pandas.DataFrame(numpy.random.randn(self.nrow, self.ncol),
index = numpy.random.randn(self.nrow), columns = list(string.letters[0:self.ncol]))
print('Check memory after dataFrame creating')
time.sleep(self.timetest)
def changeSize(self, from_ = 0, to_ = 100):
df_new = self.df[from_:to_].copy()
print('Check memory after changing size')
time.sleep(self.timetest)
print('Check memory after deleting initial pandas object')
del self.df
time.sleep(self.timetest)
print('Check memory after deleting copy of reduced pandas object')
del df_new
gc.collect()
time.sleep(self.timetest)
if __name__== '__main__':
a = temp_class()
a.createDataFrame()
a.changeSize()
Antes da criação do dataframe, tenho aprox. 15 mb de uso de memória
Depois de criar - 67mb
Depois de alterar o tamanho - 67 mb
Depois de excluir o dataframe original - 35mb
Depois de deletar mesa reduzida - 31 mb.
16 mb?
Eu uso python 2.7.2 (x32) no Windows 7 (x64) da máquina, pandas.versão é 0.7.3. numpy.versão é 1.6.1