1

通过 访问 HDF5 时pandas,我有时会遇到记录在案的错误,即无法做出超过 31 个选择条件。为了避免这种情况,我决定拆分选择条件,创建一批迭代器,然后在最后连接结果。

这是我的方法:

generators = []
for idChunk in grouper(conditionList, args.chunksizeGrouper, None):
    # creates chunks of length args.chunksizeGrouper, will add [None] to fill up shorter lists
    where = 'myId in [{}]'.format(
        ', '.join([str(id) for id in idChunk if id is not None]))
    iteratorGenerator = lambda: hdfStore.select(
        'table',
        where=where,
        iterator=True,
        chunksize=args.chunksize
        )
    generators.append(iteratorGenerator)
#finally
doSomethingWithGeneraetors(generators, df, args)

也就是说,我想创建一个生成器列表。调用generator()会返回select语句,对应where条件。

然后我将所有这些存储在一个列表中。

为了完整起见,这里是`grouper():

def grouper(iterable, n, fillvalue=None):
    '''
    takes an iterable and returns chunks.
    '''
    args = [iter(iterable)] * n
    return zip_longest(*args, fillvalue=fillvalue)

出现的问题之一是我对where重写 lambda 函数的定义:当我在第二轮时,新定义的where(基于 second idCunk)将替换lambda里面的生成器generators[0]

我该如何规避这个问题?对于这种结构,我还有什么需要注意的,还是有更好的方法来处理这个问题?

4

0 回答 0