gpt4 book ai didi

python - 6.5 GB 文件上的 Pandas read_csv 消耗超过 170GB RAM

转载 作者:太空狗 更新时间:2023-10-29 17:20:20 24 4
gpt4 key购买 nike

我想提出来,只是因为它太疯狂了。也许韦斯有一些想法。该文件非常规则:1100 行 x ~3M 列,数据以制表符分隔,仅由整数 0、1 和 2 组成。显然这不是预期的。

如果我如下预填充数据框,它会消耗约 26GB 的 RAM。

h = open("ms.txt")
header = h.readline().split("\t")
h.close()
rows=1100
df = pd.DataFrame(columns=header, index=range(rows), dtype=int)

系统信息:

  • python 2.7.9
  • ipython 2.3.1
  • numpy 1.9.1
  • Pandas 0.15.2.

欢迎任何想法。

最佳答案

你的例子的问题。

在小规模上尝试您的代码,我注意到即使您设置了 dtype=int,您实际上在结果数据框中以 dtype=object 结束。

header = ['a','b','c']
rows = 11
df = pd.DataFrame(columns=header, index=range(rows), dtype=int)

df.dtypes
a object
b object
c object
dtype: object

这是因为即使您向 pd.read_csv 函数提供列为 dtype=int 的指令,它也无法覆盖最终由数据确定的数据类型在专栏中。

这是因为 pandas 是 tightly coupled到 numpy 和 numpy dtypes。

问题是,您创建的数据框中没有数据,因此 numpy 默认数据为 np.NaN不适合整数。

这意味着 numpy 会混淆并默认返回到数据类型 object

对象数据类型的问题。

与将 dtype 设置为整数或 float 相比,将 dtype 设置为 object 意味着内存消耗和分配时间的开销很大。

您的示例的解决方法。

df = pd.DataFrame(columns=header, index=range(rows), dtype=float)

这很好用,因为 np.NaN 可以存在于 float 中。这产生

a    float64
b float64
c float64
dtype: object

并且应该占用更少的内存。

更多关于如何与数据类型相关的信息

有关 dtype 的详细信息,请参阅此相关帖子: Pandas read_csv low_memory and dtype options

关于python - 6.5 GB 文件上的 Pandas read_csv 消耗超过 170GB RAM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28219902/

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