【发布时间】:2021-11-22 13:00:43
【问题描述】:
在处理作为 pandas DataFrame 加载时占用约 10GB 内存的大型数据集时,我注意到用布尔值对其进行切片似乎占用了与制作副本一样多的内存,例如:
dfsub = df[df['date']<20201001]
据称返回大约一半原始 DataFrame 的视图实际上导致内存使用量上升 50% 至 ~15GB(使用top 实时观察)。
如果我只用几行:
dfsub = df[df['date']==20201001]
内存占用降至 10GB。
难道切片不应该只返回原始 DataFrame 的视图,而实际上并没有复制底层数据吗?我想我只是不明白 DataFrame 'views' 是如何工作的。我认为这仅仅意味着对同一底层数据存储的索引应该会产生最小的开销。否则,“视图”与“副本”的意义何在?
此外,我注意到即使选择了一个小切片,第一次调用也会暂时将内存使用量翻倍至 ~20GB,但随后又降至 ~10GB。后续调用不会导致这种短暂的内存峰值。
(python 3.4.3 上的熊猫 0.23.4)
【问题讨论】:
标签: python pandas dataframe memory