因此,构建迭代器主要是为了处理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()