我有一个 4+ Gb HDF5 表,其中的行对应于树状结构中的节点。有 3 个显着列:name
, surname
, weight
. Surname 记录给定节点的父节点的名称,name 是当前节点的名称(相对于父节点),weight 是节点的权重。 name和surname都是字符串,surname+name构成了这个节点的唯一标识。最后,对于任何给定的节点,其子节点的权重严格小于自身的权重。
我的问题是我想过滤这个表以找到所有权重小于给定阈值 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,而不返回它们的任何子节点。
最佳答案
如果您正在寻找类似 pandas 的语法并且您没有核心要求,您将需要 Blaze 之类的东西来控制它。 The documentation说它可以在并行处理部分处理 HDF5 文件。
但是您关于要用它做什么的问题并不清楚。如果必须,请给出数据输入和输出的示例。
关于python - 内存不足过滤 Pandas 中的 HDF5 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36957996/