pandas loc 操作会内存泄漏?
df = pd.DataFrame() df 大概用了 1.5GB 内存 然后我 df = df.loc[xxx] df 切片为原来的 10 分之一,用 sys.getsizeof(df) df 内存为 100 多 MB,但是 python 的内存还是 1.5G+, 怎么会这样呢? 用了 gc.collect()也是不行
df = pd.DataFrame() df 大概用了 1.5GB 内存 然后我 df = df.loc[xxx] df 切片为原来的 10 分之一,用 sys.getsizeof(df) df 内存为 100 多 MB,但是 python 的内存还是 1.5G+, 怎么会这样呢? 用了 gc.collect()也是不行
df = pandas.DataFrame([[j for j in range(100)] for i in range(10000)])
print(sys.getsizeof(df)) # 8000104
df = df.loc[:100]
print(sys.getsizeof(df)) # 80904
是不是 df 里面有 list 或者 dict 之类的引用类型,
啊,我看漏了,的确是内存还是那么多。
不过我再测了一下,如果把处理放到函数里面的话,函数执行完了,内存就会减少:
In [1]: def test():
…: df = pandas.DataFrame([[j for j in range(1000)] for _ in range(10000)])
…: df = df.loc[:100]
…: return df
…:
In [2]:
In [2]: import pandas
In [3]: a = test()