簡體   English   中英

將數據集轉換為HDF5數據集

[英]Converting a dataset into an HDF5 dataset

我有一個數據集,我想轉換為HDF5格式。 它是NOAA的數據集。 目錄結構類似於:

NOAA
├── code
├── ghcnd_all
├── ghcnd_all.tar.gz
├── ghcnd-stations.txt
├── ghcnd-version.txt
├── readme.txt
└── status.txt

我正在與熊貓一起進行數據分析。 我感興趣的主要原因是為了節省空間,數據集大約為25Gb。

如何將此數據集轉換為單個.hdf5文件?

HDF5中的數據存儲在數據集中,這些數據集可能是多維的,最多包含32個維度,每個維度最多包含無符號的64位整數長度(列數),並且包含任意大小的數據類型,包括上限的復合數據類型單個數據集的16艾字節。 數據集用於保存結構化數據,如numpy數組,pandas DataFrames,圖像和電子表格。 我還沒有找到任何方法直接將純文本或tar.gz文件放入HDF5。 但是,使用Python,您可以將文件讀入字符串並將其放入數據集中,如HDF5中的字符串所示。 除數據集外,組是HDF5中的另一個主要對象類型,是數據集和其他組的容器。 數據集和組類似於文件和目錄(或文件夾),並提供分層格式的基礎,如Unix文件系統,其中可以使用以/開頭的路徑名訪問對象。 HDF5文件是可能包含多個數據集和組的容器,沒有大小限制。

為了更好地了解HDF5是什么,我建議從HDF5下載中下載它並附帶實用程序和HDFView,安裝它然后通過HDFView學習HDF5 ,這可以在30分鍾內完成。 HDFView是一個Java GUI,可以輕松地與HDF5進行交互,但是您不能簡單地將文件拖放到其中,而是可以將文件數據導入到數據集中。 使用pandas創建HDF5文件並向其添加DataFrame非常容易,這是將數據放入HDF5文件的好方法。 以下是對此的演示。 有關HDF5的更多信息,您可以查看HDF5教程中列出的其他教程,API的 HDF5 Python示例其他HDF5 Python示例以及HDF5 for Python上的Python h5py軟件包文檔。 有關熊貓的更多信息, 10分鍾到熊貓是一個很好的起點,接下來是一系列代碼示例的熊貓Cookbook和Wes McKinney的數據分析Python ,這是大熊貓發明和開發以來的最佳教程。它是一個優秀的作者。

下面是一個使用pandas創建HDF5文件,將DataFrame加載到其中並檢索並將其副本存儲在另一個變量中的示例:

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()

現在演示從mydata.h5檢索幀的能力:

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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM