Python 在HDF存储中构造数据

Python 在HDF存储中构造数据,python,mongodb,data-structures,pandas,hdf5,Python,Mongodb,Data Structures,Pandas,Hdf5,我正在处理大量的数据集,每个数据集都有一个数据帧,由于数据集的大小,我需要从磁盘访问这些数据集。据我所知,HDF似乎是一种很好的处理方式,但我对构造数据的最佳方式有点困惑,因为每个数据帧都有不同的元数据位。如果我将数据存储在内存中,我可能会使用类似namedtuple的东西(尽管这不允许进行简单的查询): data是保存实际数据帧的属性,其他字段是文本。然而,我现在需要包括一系列的结果字段,我可能会在内存中使用数据帧的dict。如果我将其转储到mongodb,我可能会有如下内容: [{

我正在处理大量的数据集,每个数据集都有一个数据帧,由于数据集的大小,我需要从磁盘访问这些数据集。据我所知,HDF似乎是一种很好的处理方式,但我对构造数据的最佳方式有点困惑,因为每个数据帧都有不同的元数据位。如果我将数据存储在内存中,我可能会使用类似namedtuple的东西(尽管这不允许进行简单的查询):

data
是保存实际数据帧的属性,其他字段是文本。然而,我现在需要包括一系列的结果字段,我可能会在内存中使用数据帧的dict。如果我将其转储到mongodb,我可能会有如下内容:

[{
    model: 'mir',
    method: 'rfl_max',
    id: 's0001',
    data: <DataFrame>,
    results: [
        {
            option_r: 10,
            window: 30,
            data: <DataFrame>
        },
        ...
    ]
},
....
]
[{
模型:“和平号”,
方法:“rfl_max”,
id:'s0001',
数据:,
结果:[
{
备选方案:10,
窗口:30,
数据:
},
...
]
},
....
]
我的基本问题是,我能否有效地将此结构应用于HDF?具体而言:

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

  • 或者,是否有人知道基于文件的mongodb实现可能满足我的目的?

    HDFStore
    支持分层索引,请参阅

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

    HDF5在存储/搜索实际数据(例如数据帧)方面非常有效。该结构由您自行设计,但它不是为了竞争,而是为了补充
    mongodb
    。mongo擅长保持/搜索这些类似于json的嵌套结构

    您可以始终保留对数据(数据帧/系列)实际位置的引用,而不是mongo db中的实际数据


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

    感谢您的回复。所以你是说任何复杂的查询都可以在mongo中完成,但是将数据存储在HDF5中是好的?我尽量避免使用mongo,因为它需要一个中央服务器(我无权访问),这使得共享数据变得困难。每个数据帧都不是很大,目前我只是简单地将它们酸洗并加载到内存中,所以也许我应该继续这样做,复杂的查询肯定可以在HDF5中完成。但是,您无法轻松查询节点本身。请参见pytables.org了解更多信息。
    [{
        model: 'mir',
        method: 'rfl_max',
        id: 's0001',
        data: <DataFrame>,
        results: [
            {
                option_r: 10,
                window: 30,
                data: <DataFrame>
            },
            ...
        ]
    },
    ....
    ]