【问题标题】:Out of memory filtering an HDF5 table in pandas内存不足过滤熊猫中的 HDF5 表
【发布时间】:2016-08-25 18:36:27
【问题描述】:

我有一个 4+ Gb HDF5 表,其中的行对应于树状结构中的节点。有 3 个突出的列:namesurnameweight。 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,没有任何子节点。

【问题讨论】:

  • 你能贴出整段代码吗,因为不是很清楚。你说nodes是什么意思? the second half 是什么?如果您指定一个样本数据集(5-7 行),这也会很有帮助
  • 下半场,我的意思是我不知道如何满足如果一个节点在我的最终集合中,其父节点不在的条件。我希望我的编辑能进一步澄清我的情况
  • 基本上,我试图找到权重低于阈值的第一个节点
  • 对于节点111——如何区分是1+11还是11+1
  • 每个节点正好有 3 个子节点,每个子节点分别命名为 1、2、3

标签: python pandas filtering


【解决方案1】:

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

但是,您想用它做什么的问题并不清楚。如果需要,请给出数据输入和输出的例子。

【讨论】:

    猜你喜欢
    • 2015-07-26
    • 2022-11-04
    • 2017-07-13
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 2018-04-19
    • 2018-12-09
    相关资源
    最近更新 更多