gpt4 book ai didi

python - 将非常大的 CSV 数据集加载到 Python 和 R 中,Pandas 挣扎

转载 作者:太空狗 更新时间:2023-10-29 21:25:29 26 4
gpt4 key购买 nike

我正在将一个巨大的 csv (18GB) 加载到内存中,并注意到 R 和 Python 之间存在很大差异。这是在 AWS ec2 r4.8xlarge which has 244 Gb of memory 上.显然这是一个极端的例子,但这个原则也适用于真机上的小文件。

使用 pd.read_csv 时,我的文件需要大约 30 分钟才能加载并占用 174Gb 内存。基本上太多了,以至于我无法用它做任何事情。相比之下,data.table 包中 R 的 fread() 耗时约 7 分钟,内存仅为约 55Gb。

为什么pandas对象比data.table对象占用内存多?此外,为什么 pandas 对象基本上比磁盘上的文本文件大将近 10 倍?首先,.csv 并不是一种特别有效的数据存储方式。

最佳答案

您无法超越 fread 的速度,但就内存使用而言,我的猜测是您拥有在 python 中作为 64 位整数读入的整数。

假设您的文件如下所示:

a,b
1234567890123456789,12345

在 R 中,您将获得:

sapply(fread('test.txt'), class)
# a b
#"integer64" "integer"

而在 python 中(在 64 位机器上):

pandas.read_csv('test.txt').dtypes
#a int64
#b int64

因此,您将在 Python 中使用更多内存。您可以强制 read_csv 中的类型作为解决方法:

pandas.read_csv('test.txt', dtype={'b': numpy.int32}).dtypes
#a int64
#b int32

小整数也将成为 R 和 python 对象占用比 .csv 文件更多空间的原因,因为例如.csv 文件中的“1”占用 2 个字节(字符 + 逗号或行尾),但在内存中占用 4 或 8 个字节。

关于python - 将非常大的 CSV 数据集加载到 Python 和 R 中,Pandas 挣扎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47042399/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com