您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

当使用“ 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').nrows

In [6]: chunksize = 100

In [7]: for i in xrange(nrows//chunksize + 1):
            chunk = store.select('df',
                                 start=i*chunksize,
                                 stop=(i+1)*chunksize)
            # work on the chunk

In [8]: store.close()
其他 2022/1/1 18:25:08 有643人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶