Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用熊猫创建、读取和更新hdf5文件结构_Python_Pandas_Hdf5_Pytables - Fatal编程技术网

Python 使用熊猫创建、读取和更新hdf5文件结构

Python 使用熊猫创建、读取和更新hdf5文件结构,python,pandas,hdf5,pytables,Python,Pandas,Hdf5,Pytables,我们希望能够允许HDF5文件本身定义它们的列、索引和列类型,而不是维护定义HDF5数据结构的单独文件 如何从具有以下特定表结构的熊猫创建空HDF5文件: 纵队 id(Int) 姓名(Str) 更新日期(日期时间) 一些浮点数(浮点数) 索引 身份证 名字 创建HDF5并将其保存到磁盘后,如何检索列和索引信息而不必每次完全打开该文件,因为它可能包含数GB的数据 非常感谢 --更新-- 谢谢你的评论。再澄清一下: 我们确实有一些熊猫方面的经验,但决不是真正精通。让我们绊倒的部分是创建一个空的

我们希望能够允许HDF5文件本身定义它们的列、索引和列类型,而不是维护定义HDF5数据结构的单独文件

如何从具有以下特定表结构的熊猫创建空HDF5文件:

纵队

  • id(Int)
  • 姓名(Str)
  • 更新日期(日期时间)
  • 一些浮点数(浮点数)
索引

  • 身份证
  • 名字
创建HDF5并将其保存到磁盘后,如何检索列和索引信息而不必每次完全打开该文件,因为它可能包含数GB的数据

非常感谢

--更新--

谢谢你的评论。再澄清一下:

我们确实有一些熊猫方面的经验,但决不是真正精通。让我们绊倒的部分是创建一个空的数据结构,并从您不想完全打开的文件中读取该结构。在所有熊猫的例子中都有数据。Pandas示例还仅显示了两种检索数据/结构的方法,即将整个帧读入内存或发出where子句。在这种情况下,如果可能的话,我们希望能够在没有查询操作的情况下查看表结构

我知道这是个奇怪的案子。你到底为什么想要一个空的数据帧??好的,我们希望在移动数据方面有很大的灵活性,并且希望能够在数据写入之前定义目标数据帧结构,这可能要晚很多时间(例如,几小时或几天)。由于HDF5规范维护所有这些信息,因此单独存储表结构信息在方向上似乎是不正确的。因此,我们希望在这个问题上破解密码

--更新2--

按照@jeff的要求添加更多详细信息

我们想抽象一些常见的函数,如求和数据或合并两个帧。因此,我们希望能够询问每个帧的列是什么,这样我们就可以为用户提供一个视图来选择结果帧列

例如,如果我们导入了一个包含a、B、C、D和V列的CSV,并将帧保存为my_CSV.hdf保存到HDF5,则我们可以通过打开文件来确定列

然而,在我们的用例中,CSV的导入框架可能会被定期清除,不再包含数据。知道my_csv框架具有某些列和类型的原因很重要,因为我们希望用户能够在下游操作中选择这些列进行求和。假设用户只想用a列和B列中的值对V列求和,并将帧另存为my_sum。由于我们无法确保my_csv始终包含数据,我们希望确保它至少包含结构


很明显,我愿意接受其他建议。也可以将表结构信息存储在用户块中。这也是不理想的,因为结构现在保存在两个不同的区域中,但我想在保存时总是可以使用帧的最新列和索引信息来更新用户块,尽管我相信熊猫中的to_*操作会吹走用户块,所以…诸如此类。我觉得我是在说服自己维护对等结构定义,但我真的希望得到一些不必这么做的建议。

你读过HDF5上的吗?他们很彻底。您将特别希望查看
格式。您不能创建一个完全空的文件(这需要一个增强来实现);第一次使用时创建它。您无需读取文件即可查看结构。@Jeff拥有它,您无需读取几GB(不是千兆位)的数据即可浏览结构。根据上面的文档,它使用PyTables与hdf文件接口。我已经用了很多hdf的,可以建议,易于使用和结构来作为一个字典。在我的实例中,PyTables的性能非常糟糕,使用h5py可能快5倍。@PlaidFan我不认为这是一个奇怪的情况。但一般来说,在不存在的索引上定义数据类型是非常棘手的。不能创建空的HDF结构。正如我所说,这是可以做到的,但有点不平凡。也许以数据为例说明你想要什么。回答你的第一个问题。HDF5维护自己的元数据;您不需要任何其他东西来查找和提取数据。但是,您不能在设置后更改它;尽管您可以删除/复制节点,然后重新开始。不应将HDF5视为标准数据库。它的附加和阅读速度惊人地快。更新/删除的效率不高。