首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么熊猫的数据文件比原始文本文件消耗更多的内存?

为什么熊猫的数据文件比原始文本文件消耗更多的内存?
EN

Stack Overflow用户
提问于 2019-06-19 06:40:32
回答 1查看 4.8K关注 0票数 8

我试图使用熊猫pd.read_csv("file.txt",sep="\t")将一个大型选项卡/txt (size =3GB)文件导入Python。我加载的文件是一个".tab“文件,其中我将扩展名改为".txt”,以便用read_csv()导入它。它是一个拥有305列和+/- 1000行的文件。

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

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

我的问题是:一个3gb的文件怎么可能需要超过20 3gb的内存才能使用熊猫read_csv()导入Python?我做错什么了吗?

编辑:在执行df.dtypes时类型是objectfloat64int64的混合

更新:我使用了以下代码来克服这个问题并执行我的计算:

代码语言:javascript
复制
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

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

EN

Stack Overflow用户

回答已采纳

发布于 2019-06-19 06:51:19

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

在Python (在我的机器上)中,空字符串需要49个字节,如果是ASCII,每个字符需要一个额外的字节(如果Unicode,则每个字符需要74个字节,每个字符需要额外的2个字节)。对于一排305个空域,这大约是15公斤。这类行中的100万零1行将占用大约22 Mb的内存,而在CSV文件中它们将占用大约437 Mb。

熊猫/numpy对数字很在行,因为它们可以非常紧凑地表示一个数字系列(就像C程序那样)。一旦您不再使用与C兼容的数据类型,它就会像Python一样使用内存,这就是.不太节俭。

票数 12
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56661501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档