读取存储在 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)
我怎样才能读回数据帧?似乎没有任何readH5DataFrame
或loadH5DataFrame
函数?
另外,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 中的数据帧的主要内容,如果未能解决你的问题,请参考以下文章
是否可以直接重命名存储在 hdf5 文件中的 pandas 数据框的列?
读取存储在 HDF5 中的部分数据集 - python 2.7