Python 将数据集转换为HDF5数据集

Python 将数据集转换为HDF5数据集,python,hdf5,pytables,h5py,Python,Hdf5,Pytables,H5py,我有一个数据集,我想转换成HDF5格式。 它是来自的数据集。 目录结构类似于: NOAA ├── code ├── ghcnd_all ├── ghcnd_all.tar.gz ├── ghcnd-stations.txt ├── ghcnd-version.txt ├── readme.txt └── status.txt 我正在与熊猫合作进行数据分析。我对此感兴趣的主要原因是为了节省空间,数据集是~25Gb 如何将此数据集转换为单个.hdf5文件?hdf5中的数据存储在数据集中,这些数据集

我有一个数据集,我想转换成HDF5格式。 它是来自的数据集。 目录结构类似于:

NOAA
├── code
├── ghcnd_all
├── ghcnd_all.tar.gz
├── ghcnd-stations.txt
├── ghcnd-version.txt
├── readme.txt
└── status.txt
我正在与熊猫合作进行数据分析。我对此感兴趣的主要原因是为了节省空间,数据集是~25Gb


如何将此数据集转换为单个.hdf5文件?

hdf5中的数据存储在数据集中,这些数据集是齐次数组,可能是多维的,最多有32个维度,每个维度最多有一个无符号的64位整数长度(列数)以及包含任意大小的数据类型,包括单个数据集上限超过16 EB的复合数据类型。数据集用于保存结构化数据,如numpy数组、熊猫数据帧、图像和电子表格。我没有找到任何方法直接将纯文本或tar.gz文件放入HDF5。但是,使用Python可以将文件读入字符串并将其放入数据集中,如中所示。除了数据集,组是HDF5中的另一种主要对象类型,是数据集和其他组的容器。数据集和组类似于文件和目录(或文件夹),并为分层格式(如Unix文件系统)提供了基础,在该文件系统中,可以使用以/开头的路径名访问对象。HDF5文件是可能包含多个数据集和组的容器,没有大小限制


为了更好地了解HDF5是什么,我建议从下载它和附带的实用程序以及HDFView,安装它,然后进行测试,这可以在30分钟内完成。HDFView是一个Java GUI,可以轻松地与HDF5交互,但是您不能简单地将文件拖放到其中,而是可以将文件数据导入到数据集中。创建HDF5文件并使用pandas向其添加数据帧非常容易,这是将数据放入HDF5文件的一种好方法。下面就是一个例子。有关HDF5的更多信息,请参阅上列出的其他教程和上的Python h5py软件包文档。关于熊猫的更多信息,这里是一个很好的起点,接下来是一系列代码示例和Wes McKinney,这是自他发明和开发了大部分熊猫以来,关于熊猫的最佳教程,也是一位优秀的作者

下面是一个使用pandas创建HDF5文件、将数据帧加载到其中、检索并将其副本存储在另一个变量中的示例:

In [193]: import pandas as pd

In [194]: frame = pd.read_csv('test.csv')

In [195]: frame
Out[195]: 
   a   b   c   d message
0  1   2   3   4     one
1  5   6   7   8     two
2  9  10  11  12   three

In [196]: type(frame)
Out[196]: pandas.core.frame.DataFrame

In [197]: hdf5store = pd.HDFStore('mydata.h5')

In [198] %ls mydata.h5
 Volume in drive C is OS
 Volume Serial Number is 5B75-665D

 Directory of C:\Users\tn\Documents\python\pydata

09/02/2015  12:41 PM                 0 mydata.h5
               1 File(s)              0 bytes
               0 Dir(s)  300,651,331,584 bytes free

In [199]: hd5store['frame'] = frame

In [200]: hdf5store
Out[200]: 
<class 'pandas.io.pytables.HDFStore'>
File path: mydata.h5
/frame            frame        (shape->[3,5])

In [201]: list(hdf5store.items())
Out[201]: 
[('/frame', /frame (Group) ''
    children := ['block0_values' (Array), 'block0_items' (Array), 'axis1' (Array), 'block1_items' (Array), 'axis0' (Array), 'block1_values' (VLArray)])]

In [202]: hdf5store.close()

hdf5中的数据存储在数据集中,这些数据集是可能是多维的数组,用于保存结构化数据,如numpy数组、熊猫数据帧、图像和电子表格。我还没有找到直接将纯文本或tar.gz文件放入hdf5的方法。但是,使用Python可以将文件读入字符串并将其放入数据集中,如中所示。hdf5文件是可能包含多个数据集的容器。我的目录结构有误导性。我不需要包含tar.gz文件。我明白你的意思。谢谢你的澄清。因此,我真的需要一个python脚本来将所有文件转换为更结构化的数据,然后可以通过python将其传递到HDF5中。为了更好地了解HDF5是什么,我建议从下载、安装它并在上阅读介绍性教程。它附带的JavaGUI使与HDF5的交互变得很容易,但是您不能将文件拖放到HDF5或任何类似的东西中。创建HDF5文件并使用Pandas向其添加数据帧非常简单,这是将大量数据放入HDF5文件的一个好方法。你应该写一个答案,这样我就可以接受。你的评论共同回答了我的问题。我写了一个答案并添加了更多信息。感谢你的回答。
In [203]: hdf5store2 = pd.HDFStore('mydata.h5')

In [204]: list(hdf5store2.items())
Out[204]: 
[('/frame', /frame (Group) ''
    children := ['block0_values' (Array), 'block0_items' (Array), 'axis1' (Array), 'block1_items' (Array), 'axis0' (Array), 'block1_values' (VLArray)])]

In [205]: framecopy = hdf5store2['frame']

In [206]: framecopy
Out[206]: 
   a   b   c   d message
0  1   2   3   4     one
1  5   6   7   8     two
2  9  10  11  12   three

In [207]: framecopy == frame
Out[207]: 
      a     b     c     d message
0  True  True  True  True    True
1  True  True  True  True    True
2  True  True  True  True    True

In [208]: hdf5store2.close()