Jupyter Notebook渲染DataFrame时内存占用持续增长的问题求助
Jupyter Notebook渲染DataFrame时内存占用持续增长的问题求助
大家好,我最近在Jupyter环境里处理大型数据集时遇到了一个头疼的内存问题,折腾了好几种方法都没解决,来这儿求助各位大佬!
先给大家看下我生成测试数据集的代码,特意做了个规模不小的数据集(300万行、100列),同时生成了Polars和Pandas两种格式:
import pandas as pd import polars as pl from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split X, y = make_classification( n_samples=3_000_000, n_features=100, n_informative=20, n_redundant=10, n_repeated=0, n_classes=2, random_state=42, shuffle=False, ) feature_names = [f"feature_{i}" for i in range(X.shape[1])] X_polars = pl.DataFrame(X, schema=feature_names) y_polars = pl.Series(values=y, name="target") X_pandas = X_polars.clone().to_pandas()
接下来问题就出现了:当我在Jupyter单元格里执行如下代码,让Jupyter自动渲染DataFrame的HTML/纯文本格式输出时:
df = X_polars+1 df
第一次运行内存占用还正常,但每次重复运行同一个单元格,内存都会累加增长,哪怕我没保留新的变量引用也一样!
我用psutil监测了可用内存,情况如下:
第一次运行的代码和输出:
# First time running import psutil print(psutil.virtual_memory().available / (1024 ** 3)) df = X_polars+1 df
输出结果:
26.315258026123047 `df` table (这里是Jupyter渲染出的表格)
第四次运行同样的单元格后,可用内存直接降到了:
19.47336196899414
我试过各种排查手段,问题依然存在:
- 换成Pandas的
X_pandas执行同样操作,内存还是会累加 - 不定义
df变量,直接运行X_polars+1让Jupyter渲染输出,内存还是涨 - 换了Linux系统测试(我本地是Windows10),问题依旧
- 手动调用
gc.collect()强制垃圾回收,完全没用 - 换了不同的IDE/环境:VSCode、Jupyter Notebook、Jupyter Lab,都有这个问题
但有两种情况不会出现内存增长:
- 用
print(X_polars+1)输出结果 - 用
print(df)输出结果
有没有大佬遇到过类似的问题?或者能帮我分析下为什么Jupyter自动渲染DataFrame会导致这种内存泄漏啊?
备注:内容来源于stack exchange,提问作者Kevin Li
相关产品推荐
相关产品推荐

