我一直在想...如果我正在读取,比方说,一个400MB的csv文件到熊猫数据帧(使用read_csv或read_table),有没有办法猜测这需要多少内存?只是想更好地感受数据帧和内存...
我想我会带来更多的数据来讨论。
我对这个问题进行了一系列测试。
通过使用pythonresource
包,我获得了进程的内存使用情况。
通过将csv写入StringIO
缓冲区,我可以轻松地测量它的大小(以字节为单位)。
我做了两个实验,每个实验创建了20个数据帧,大小在10000到1000000行之间。两者都有10列。
在第一个实验中,我只在数据集中使用了浮点。
与csv文件相比,内存是如何随着行数的增加而增加的。(大小以兆字节为单位)
在第二个实验中,我采用了相同的方法,但数据集中的数据只包含短字符串。
csv的大小和数据帧的大小之间的关系似乎变化很大,但内存中的大小总是会大2-3倍(对于本实验中的帧大小)
我很想用更多的实验来完成这个答案,如果你想让我尝试一些特别的东西,请评论。
下面是不同方法的比较-sys。getsizeof(df)
是最简单的。
在这个例子中,df
是一个包含814行,11列(2 int,9个对象)的数据框-从一个427kb的shapefile中读取
>>> import sys >>> sys.getsizeof(df) (gives results in bytes) 462456
>>> df.memory_usage() ... (lists each column at 8 bytes/row) >>> df.memory_usage().sum() 71712 (roughly rows * cols * 8 bytes) >>> df.memory_usage(deep=True) (lists each column's full memory usage) >>> df.memory_usage(deep=True).sum() (gives results in bytes) 462432
打印数据帧信息到标准输出。从技术上讲,这些是千字节(KiB),而不是千字节——正如docstring所说,“内存使用情况以人类可读单位(base-2表示)显示。”所以得到的字节会乘以1024,例如。451.6 KiB=462,438字节。
>>> df.info() ... memory usage: 70.0+ KB >>> df.info(memory_usage='deep') ... memory usage: 451.6 KB
df。memory_usage()
将返回每列占用的字节数:
>>> df.memory_usage()
Row_ID 20906600
Household_ID 20906600
Vehicle 20906600
Calendar_Year 20906600
Model_Year 20906600
...
要包含索引,请传递index=True
。
因此,要获得整体内存消耗:
>>> df.memory_usage(index=True).sum()
731731000
此外,传递深层=True
将启用更准确的内存使用情况报告,该报告说明了包含对象的全部使用情况。
这是因为如果deep=False
(默认情况),内存使用不包括非数组组件的元素所消耗的内存。
假设熊猫数据帧如下所示: 如何将第三行(如row3)提取为pd数据帧?换句话说,row3.shape应该是(1,5),row3.head()应该是:
我有一个需要一个数据帧作为输入的计算。我想对存储在扩展到51GB的netCDF文件中的数据运行此计算-目前,我一直在使用打开文件,并使用块(我的理解是,此打开的文件实际上是一个dask数组,因此一次只能将数据块加载到内存中)。但是,我似乎无法利用这种延迟加载,因为我必须将xarray数据转换为pandas数据帧才能运行我的计算——我的理解是,在这一点上,所有数据都加载到内存中(这是不好的)。 所以
我有一个csv文件列表,我使用 我目前正在尝试遍历csv列表,并使用方法将axis参数设置为1,以按列将所有数据帧添加到一起。 它是工作的希望,但我遇到的问题,因为所有的数据帧都有相同的冒号名称,当我连接他们我得到例如10列都与关键"日期" 不管怎样,我能给哥伦布起个独一无二的名字吗?比如伦敦约会,柏林约会?显然,这些名称基于数据帧的名称。
我有这个熊猫数据框 这就给了我: 我该怎么办 做一个新的人物, 将标题添加到图"标题这里" 以某种方式创建一个映射,这样标签不是29,30等,而是“29周”,“30周”等。 将图表的较大版本保存到我的计算机(例如10 x 10英寸) 这件事我已经琢磨了一个小时了!
我在Python中使用一个视频游戏的熊猫DataFrame,每个游戏都有一种类型。我正在尝试删除任何在DataFrame中出现次数少于一定次数的类型的视频游戏,但我不知道该怎么做。我确实发现了一个StackOverflow问题,这个问题似乎是相关的,但我根本无法破译这个解决方案(可能是因为我从未听说过R,而且我对函数编程的记忆充其量也很生疏)。 帮助?
我想在我的数据的每一列中找到< code>NaN的数目。