gpt4 book ai didi

python - 为什么 pandas dataframe 消耗的 RAM 比原始文本文件的大小多得多?

转载 作者:行者123 更新时间:2023-11-28 22:10:28 24 4
gpt4 key购买 nike

我正在尝试使用 pandas pd.read_csv("file.txt",sep="\t") 将大型 tab/txt(大小 = 3 gb)文件导入 Python。我加载的文件是一个“.tab”文件,我将其扩展名更改为“.txt”以使用 read_csv() 导入它。这是一个包含 305 列和 +/- 1 000 000 行的文件。

当我执行代码时,一段时间后 Python 返回 MemoryError。我搜索了一些信息,这基本上意味着没有足够的 RAM 可用。当我在 read_csv() 中指定 nrows = 20 时,它工作正常。

我使用的计算机有 46gb 的 RAM,其中大约 20gb 可用于 Python。

我的问题:3gb 的文件需要超过 20gb 的 RAM 才能使用 pandas read_csv() 导入 Python 怎么可能?我做错了什么吗?

编辑:当执行df.dtypes 时,类型是objectfloat64int64

更新:我使用以下代码来解决问题并执行我的计算:

summed_cols=pd.DataFrame(columns=["sample","read sum"])
while x<352:
x=x+1
sample_col=pd.read_csv("file.txt",sep="\t",usecols=[x])
summed_cols=summed_cols.append(pd.DataFrame({"sample":[sample_col.columns[0]],"read sum":sum(sample_col[sample_col.columns[0]])}))
del sample_col

它现在选择一列,执行计算,将结果存储在数据框中,删除当前列,然后移动到下一列

最佳答案

Pandas 正在分割文件,并单独存储数据。我不知道数据类型,所以我假设最坏的情况:字符串。

在 Python 中(在我的机器上),一个空字符串需要 49 个字节,如果是 ASCII,则每个字符需要一个额外的字节(如果是 Unicode,则需要 74 个字节,每个字符需要额外的 2 个字节)。对于一行 305 个空字段,这大约是 15Kb。一百万半这样的行将占用大约 22Gb 的内存,而在 CSV 文件中将占用大约 437Mb。

Pandas/numpy 擅长处理数字,因为它们可以非常紧凑地表示数字序列(就像 C 程序那样)。一旦您离开与 C 兼容的数据类型,它就会像 Python 一样使用内存,这……不是很节俭。

关于python - 为什么 pandas dataframe 消耗的 RAM 比原始文本文件的大小多得多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56661501/

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