Pandas: Wo ist das Speicherleck hier?
Ich stelle mich dem Problem von Speicherlecks mitpandas
Bibliothek inPython. Ich erschaffepandas.dataframe
Objekte in meiner Klasse und ich haben eine Methode, die die Größe des Datenrahmens gemäß meinen Bedingungen ändert. Nachdem ich die Größe des Datenrahmens geändert und ein neues Pandas-Objekt erstellt habe, habe ich die ursprüngliche Datei pandas.dataframe in meiner Klasse neu geschrieben. Die Speichernutzung ist jedoch sehr hoch, selbst nachdem die Anfangstabelle erheblich reduziert wurde. Code für ein kurzes Beispiel (ich habe keinen Prozessmanager geschrieben, siehe Taskmanager):
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()
Vor dem Erstellen des Datenrahmens habe ich ca. 15 MB Arbeitsspeicher
Nach dem Erstellen - 67mb
Nach dem Ändern der Größe - 67 mb
Nach dem Löschen des ursprünglichen Datenrahmens - 35 MB
Nach dem Löschen der reduzierten Tabelle - 31 mb.
16 mb?
Ich verwende Python 2.7.2 (x32) unter Windows 7 (x64), Pandas.Ausführung ist 0,7,3. taub.Ausführung ist 1.6.1