栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

当使用“pandas.read_hdf()”读取巨大的HDF5文件时,即使我通过指定chunksize读取数据块,为什么仍然仍然出现MemoryError错误?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

当使用“pandas.read_hdf()”读取巨大的HDF5文件时,即使我通过指定chunksize读取数据块,为什么仍然仍然出现MemoryError错误?

因此,构建迭代器主要是为了处理

where
子句。
PyTables
返回子句为True的索引列表。这些是行号。在这种情况下,没有where子句,但是我们仍然使用索引器,在这种情况下,它只是
np.arange
在行列表中。

300MM行需要2.2GB。对于32位Windows(通常最大容量约为1GB)而言,这实在太多了。在64位上,这没有问题。

In [1]: np.arange(0,300000000).nbytes/(1024*1024*1024.0)Out[1]: 2.2351741790771484

因此,这应该通过切片语义来处理,这将使其仅占用少量的内存。问题在这里打开。

所以我建议这个。在这里,索引器是直接计算的,这提供了迭代器的语义。

In [1]: df = Dataframe(np.random.randn(1000,2),columns=list('AB'))In [2]: df.to_hdf('test.h5','df',mode='w',format='table',data_columns=True)In [3]: store = pd.HDFStore('test.h5')In [4]: nrows = store.get_storer('df').nrowsIn [6]: chunksize = 100In [7]: for i in xrange(nrows//chunksize + 1): chunk = store.select('df',start=i*chunksize,stop=(i+1)*chunksize) # work on the chunkIn [8]: store.close()


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/418698.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号