python - 在 HDF 存储中构建数据结构

标签 python mongodb data-structures pandas hdf5

我正在处理大量数据集,每个数据集都是 pandas DataFrame,由于它们的大小,我需要从磁盘访问它们。据我所知,HDF 似乎是使用它们的好方法,但我对构建数据的最佳方法有点困惑,因为每个 DataFrame 都有各种元数据。如果我要将数据存储在内存中,我可能可以使用类似命名元组的东西(尽管这不允许简单的查询):

DataSet = namedtuple('DataSet', 'model method id data')

data 是保存实际数据帧的属性,其他字段是文本。但是,我现在需要包含一系列结果字段,我可能会使用 DataFrame 字典在内存中执行此操作。如果我将其转储到 mongodb,我可能会得到如下所示的内容:

[{
    model: 'mir',
    method: 'rfl_max',
    id: 's0001',
    data: <DataFrame>,
    results: [
        {
            option_r: 10,
            window: 30,
            data: <DataFrame>
        },
        ...
    ]
},
....
]

我的基本问题是我可以有效地将这种结构应用于 HDF 吗?具体来说:

  1. HDF 支持这种嵌套吗?如果支持,我该怎么做?
  2. 在 mongo 中查找这样的数据非常高效,因为它使用索引。 HDF 也是如此,例如我可以有效地找到与特定方法和 option_r 匹配的所有结果吗?
  3. 我对 HDF 的有限经验是通过 pandas 实现的,它似乎只允许存储面板上的系列、数据帧。这真的是一个限制吗,还是我只是做错了什么?

或者,有人知道基于文件的 mongodb 实现可以满足我的目的吗?

最佳答案

HDFStore 支持分层索引,请参阅here .

您可以存储附加到特定节点的属性,请参阅 here 。这通常仅限于少量元数据。

HDF5 在存储/搜索实际数据方面非常高效,例如一个数据框。结构比你高了2个,但它并不是为了竞争,而是可以补充mongodb。 mongo 擅长保存/搜索这些“类似 json”的嵌套结构。

您始终可以保留对数据实际位置(DataFrame/Series)的引用,而不是 mongo 数据库中的实际数据。

HDF5 存储/搜索实际数据的速度将快几个数量级(非常小的数据集除外)。

关于python - 在 HDF 存储中构建数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22243753/

相关文章:

node.js - 无法发布(评论帖子)| Mongodb 与 Mongoose

python - 是否可以在 SQLite 中存储 Python 类对象?

linux - 在终端中设置 python 文档的换行宽度

mongodb - 如何向所有文档添加字段,其中前 100 个文档的值为 1,后 100 个文档的值为 2,依此类推?

node.js - 任何使用 mongo db 完成用户集成的 node.js 示例?

c++ - 点遍历的最佳数据结构

python - 如何修复 "Forbidden (CSRF cookie not set.)"

python - 如何使用scrapy从站点地图中抓取修改日期已更改的url?

java - 在 Java 中删除 ArrayList 的最后一个对象

java - 以线程安全的方式填充映射并将该映射从后台线程传递给另一个方法?