内存不足过滤pandas中的HDF5表

时间:2016-04-30 17:27:54

标签: python pandas filtering

我有一个4+ Gb HDF5表,其行对应于树状结构中的节点。有3个显着列:namesurnameweight。姓氏记录给定节点的父节点的名称,name是当前节点的名称(相对于父节点),weight是节点的权重。名称和姓氏都是字符串,姓氏+名称形成此节点的唯一标识符。最后,对于任何给定的节点,其子节点的权重严格小于其自身的权重。

我的问题是我要过滤此表以查找权重小于给定阈值M的所有节点,但如果我的最终集中存在一个节点,则其父节点不应该在该集合中。

我已经使用pd.read_hdf(,where = ['weight < M'])来减少所有节点的重量满足我的条件,但我不知道如何满足下半部分。这也需要大部分内存完成,因为表本身是巨大的。

编辑:我之前从未问过这里的问题,所以如果你需要更清晰,请询问

更新:以下是该表的示例。

surname    name    weight
1          1       0.016496
1          2       0.004884
1          3       0.004691

为了澄清nodes的含义,想象每一行代表下图中较低3个节点的属性:

       1  
  /    |     \  
11     12     13  
...    ...    ...

例如,节点12通过取其父(1)的名称并连接其位置(2)来命名。 节点11,12和13每个都有3个节点作为它们的子节点,其权重严格小于它们各自的父节点。如果我设置权重阈值M = 0.0165,我想要返回节点11,12和13,而不是他们的孩子。

1 个答案:

答案 0 :(得分:0)

如果你正在寻找像语法这样的熊猫,并且你已经没有核心要求,你需要像Blaze这样的东西来控制它。 The documentation表示它可以在并行处理部分处理HDF5文件。

然而,您对自己想要做什么的问题并不清楚。如果必须,请举例说明数据输入和输出。