读取存储在 HDF5 中的数据帧

Posted

技术标签:

【中文标题】读取存储在 HDF5 中的数据帧【英文标题】:reading data frame stored in HDF5 【发布时间】:2014-01-22 13:51:32 【问题描述】:

我有一个大数据框(126041 个观测值,共 604 个变量)。我是 HDF5 格式的新手。我保存HDF5文件如下:

writeH5DataFrame(myData,"C:/myDir/myHDF5.h5",overwrite=T)

    我怎样才能读回数据帧?似乎没有任何readH5DataFrameloadH5DataFrame 函数?

    另外,writeH5DataFrame 需要非常长的时间,这可能是因为有大量的列(在这种情况下为 604)。文档提到“每列的数据都存储在单独的 H5Dataset 中。” - 不确定这是否是花费很长时间的原因。有什么方法可以加快编写 HDF5 格式的 DataFrame 的速度吗?

【问题讨论】:

不是每个 HDF5 文件都可以在 R 中打开。 你不是在使用 MODIS 数据集吗? MODIS 数据集中的 HDF5 不能直接在 R 中打开(我不确定是因为格式还是正弦投影),你必须使用一些外部工具来处理这些文件。请参阅 MODIS HDF5 spatial data tutorial 另见***.com/q/15974643/684229 不,我没有使用 MODIS 数据集。 【参考方案1】:

我不知道你用的是哪个包,但是使用rhdf5包,写/读hdf5文件看起来很容易。

## uncomment the 2 lines after to install the package
## source("http://bioconductor.org/biocLite.R")
## biocLite("rhdf5")
library(rhdf5)
## empty HDF5 file : the data base
h5createFile("myhdf5file.h5")
## create group hierarchy. : tables or datasets
h5createGroup("myhdf5file.h5","group1")
h5createGroup("myhdf5file.h5","group2")

## save a matrix 
A = matrix(1:10,nr=5,nc=2)
h5write(A, "myhdf5file.h5","group1/A")

## save an array with attribute 
B = array(seq(0.1,2.0,by=0.1),dim=c(5,2,2))
attr(B, "scale") <- "liter"
h5write(B, "myhdf5file.h5","group2/B")
## check the data base
h5ls("myhdf5file.h5")

   group   name       otype  dclass       dim
0       / group1   H5I_GROUP                  
1 /group1      A H5I_DATASET INTEGER     5 x 2
2       / group2   H5I_GROUP                  
3 /group2      B H5I_DATASET   FLOAT 5 x 2 x 2

 ## read A and B
 D = h5read("myhdf5file.h5","group1/A")
 E = h5read("myhdf5file.h5","group2/B")

【讨论】:

我正在使用h5r 包。 rhdf5 包似乎不再受支持。另外,我对保存数据框而不是矩阵或数组感兴趣(在保存之前将数据框转换为矩阵可能是一种方法)。 @uday rhdf5 得到积极支持;在Bioconductor 邮件列表中提问。

以上是关于读取存储在 HDF5 中的数据帧的主要内容,如果未能解决你的问题,请参考以下文章

如何从 C++ 中的 hdf5 文件中读取数据块?

是否可以直接重命名存储在 hdf5 文件中的 pandas 数据框的列?

读取存储在 HDF5 中的部分数据集 - python 2.7

从多个熊猫数据帧创建 HDF5

在 HDF5 中存储 Pandas 对象和常规 Python 对象

将 Pandas DataFrames 保存为 HDF5 存储,各种错误