【发布时间】:2017-05-15 22:00:15
【问题描述】:
我正在阅读以 csv 格式存储的巨大 Pandas(版本 18.1,故意)数据帧(〜总计 30 GB)。但是,使用 read_csv 时,内存消耗会增长到初始 csv 的两倍。文件 --> 60 GB。我知道chunksize 参数。然而,这速度较慢,并没有真正减少内存使用量。我用 4 GB 的 DataFrame 进行了尝试。读取 DataFrame 后,脚本仍然消耗约 7 GB RAM。这是我的代码:
df = None
for chunk in pandas.read_csv(fn, chunksize=50000):
if df is None:
df = chunk
else:
df = pandas.concat([df, chunk])
这只是一个简短的版本。我也知道,指定 dtype 可以节省内存。所以这是我的问题。读取大熊猫数据帧的最佳方式(性能、内存)是什么?
【问题讨论】:
-
试试这个:
df = pd.concat((x for x in pd.read_csv(fn, chunksize=50000)) -
我试过了。不幸的是,这并没有改变任何东西。
-
一年后,我使用的是 version0.22。似乎它仍然是一个未解决的问题......我在读取 ~7G csv 文件时遇到了类似的内存错误。奇怪的是,在我的 16G 内存的 MacBook 上,它运行良好。但是在我的 32G 内存的 Ubuntu17 上,它抛出了“内存错误”。我的 MacBook 上的最终数据框说它是 ~11G,这是有道理的......谁能帮我理解它?
标签: python-3.x pandas memory memory-management out-of-memory