成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

在pandas中利用hdf5高效存儲數據

存儲 后端
HDF5(Hierarchical Data Formal)是用于存儲大規模數值數據的較為理想的存儲格式,本文就將針對pandas中讀寫HDF5文件的方法進行介紹。

一、簡介

HDF5(Hierarchical Data Formal)是用于存儲大規模數值數據的較為理想的存儲格式。

其文件后綴名為h5,存儲讀取速度非常快,且可在文件內部按照明確的層次存儲數據,同一個HDF5可以看做一個高度整合的文件夾,其內部可存放不同類型的數據。

在Python中操縱HDF5文件的方式主要有兩種,一是利用pandas中內建的一系列HDF5文件操作相關的方法來將pandas中的數據結構保存在HDF5文件中,二是利用h5py模塊來完成從Python原生數據結構向HDF5格式的保存。

本文就將針對pandas中讀寫HDF5文件的方法進行介紹。

圖1

二、利用pandas操縱HDF5文件

1. 寫出文件

pandas中的HDFStore()用于生成管理HDF5文件IO操作的對象,其主要參數如下:

  • 「path」:字符型輸入,用于指定h5文件的名稱(不在當前工作目錄時需要帶上完整路徑信息)
  • 「mode」:用于指定IO操作的模式,與Python內建的open()中的參數一致,默認為'a',即當指定文件已存在時不影響原有數據寫入,指定文件不存在時則新建文件;'r',只讀模式;'w',創建新文件(會覆蓋同名舊文件);'r+',與'a'作用相似,但要求文件必須已經存在;
  • 「complevel」:int型,用于控制h5文件的壓縮水平,取值范圍在0-9之間,越大則文件的壓縮程度越大,占用的空間越小,但相對應的在讀取文件時需要付出更多解壓縮的時間成本,默認為0,代表不壓縮

下面我們創建一個HDF5 IO對象store:

  1. import pandas as pd 
  2.  
  3. store = pd.HDFStore('demo.h5') 
  4. '''查看store類型''' 
  5. print(store) 

圖2

可以看到store對象屬于pandas的io類,通過上面的語句我們已經成功的初始化名為demo.h5的的文件,本地也相應的會出現對應文件。

接下來我們創建pandas中不同的兩種對象,并將它們共同保存到store中,首先創建Series對象:

  1. import numpy as np 
  2.  
  3. #創建一個series對象 
  4. s = pd.Series(np.random.randn(5), index=['a', 'b', 'c', 'd', 'e']) 

圖3

接著我們創建一個DataFrame對象:

  1. #創建一個dataframe對象 
  2. df = pd.DataFrame(np.random.randn(8, 3), 
  3.                  columns=['A', 'B', 'C']) 
  4. df 

圖4

第一種方式利用鍵值對將不同的數據存入store對象中:

  1. store['s'], store['df'] = s, df 

第二種方式利用store對象的put()方法,其主要參數如下:

  • 「key」:指定h5文件中待寫入數據的key
  • 「value」:指定與key對應的待寫入的數據
  • 「format」:字符型輸入,用于指定寫出的模式,'fixed'對應的模式速度快,但是不支持追加也不支持檢索;'table'對應的模式以表格的模式寫出,速度稍慢,但是支持直接通過store對象進行追加和表格查詢操作

使用put()方法將數據存入store對象中:

  1. store.put(key='s'value=s);store.put(key='df'value=df

既然是鍵值對的格式,那么可以查看store的items屬性(注意這里store對象只有items和keys屬性,沒有values屬性):

  1. store.items 

圖5

調用store對象中的數據直接用對應的鍵名來索引即可:

  1. store['df'] 

圖6

刪除store對象中指定數據的方法有兩種,一是使用remove()方法,傳入要刪除數據對應的鍵:

  1. store.remove('s') 

二是使用Python中的關鍵詞del來刪除指定數據:

  1. del store['s'] 

這時若想將當前的store對象持久化到本地,只需要利用close()方法關閉store對象即可,而除了通過定義一個確切的store對象的方式之外,還可以從pandas中的數據結構直接導出到本地h5文件中:

  1. #創建新的數據框 
  2. df_ = pd.DataFrame(np.random.randn(5,5)) 
  3. #導出到已存在的h5文件中,這里需要指定key 
  4. df_.to_hdf(path_or_buf='demo.h5',key='df_'
  5. #創建于本地demo.h5進行IO連接的store對象 
  6. store = pd.HDFStore('demo.h5') 
  7. #查看指定h5對象中的所有鍵 
  8. print(store.keys()) 

圖7

2. 讀入文件

在pandas中讀入HDF5文件的方式主要有兩種,一是通過上一節中類似的方式創建與本地h5文件連接的IO對象,接著使用鍵索引或者store對象的get()方法傳入要提取數據的key來讀入指定數據:

  1. store = pd.HDFStore('demo.h5') 
  2. '''方式1''' 
  3. df1 = store['df'] 
  4. '''方式2''' 
  5. df2 = store.get('df') 
  6. df1 == df2 

圖8

可以看出這兩種方式都能順利讀取鍵對應的數據。

第二種讀入h5格式文件中數據的方法是pandas中的read_hdf(),其主要參數如下:

  • 「path_or_buf」:傳入指定h5文件的名稱
  • 「key」:要提取數據的鍵

需要注意的是利用read_hdf()讀取h5文件時對應文件不可以同時存在其他未關閉的IO對象,否則會報錯,如下例:

  1. print(store.is_open) 
  2. df = pd.read_hdf('demo.h5',key='df'

圖9

把IO對象關閉后再次提取:

  1. store.close() 
  2. print(store.is_open) 
  3. df = pd.read_hdf('demo.h5',key='df'
  4. df 

圖10

3. 性能測試

接下來我們來測試一下對于存儲同樣數據的csv格式文件、h5格式的文件,在讀取速度上的差異情況:

這里我們首先創建一個非常大的數據框,由一億行x5列浮點類型的標準正態分布隨機數組成,接著分別用pandas中寫出HDF5和csv格式文件的方式持久化存儲:

  1. import pandas as pd 
  2. import numpy as np 
  3. import time 
  4.  
  5. store = pd.HDFStore('store.h5') 
  6. #生成一個1億行,5列的標準正態分布隨機數表 
  7. df = pd.DataFrame(np.random.rand(100000000,5)) 
  8. start1 = time.clock() 
  9. store['df'] = df 
  10. store.close() 
  11. print(f'HDF5存儲用時{time.clock()-start1}秒') 
  12. start2 = time.clock() 
  13. df.to_csv('df.csv',index=False
  14. print(f'csv存儲用時{time.clock()-start2}秒') 

圖11

在寫出同樣大小的數據框上,HDF5比常規的csv快了將近50倍,而且兩者存儲后的文件大小也存在很大差異:

圖12

csv比HDF5多占用將近一倍的空間,這還是在我們沒有開啟HDF5壓縮的情況下,接下來我們關閉所有IO連接,運行下面的代碼來比較對上述兩個文件中數據還原到數據框上兩者用時差異:

  1. import pandas as pd 
  2. import time 
  3.  
  4. start1 = time.clock() 
  5. store = pd.HDFStore('store.h5',mode='r'
  6. df1 = store.get('df') 
  7. print(f'HDF5讀取用時{time.clock()-start1}秒') 
  8. start2 = time.clock() 
  9. df2 = pd.read_csv('df.csv') 
  10. print(f'csv讀取用時{time.clock()-start2}秒') 

圖13

HDF5用時僅為csv的1/13,因此在涉及到數據存儲特別是規模較大的數據時,HDF5是你不錯的選擇。

 

責任編輯:趙寧寧 來源: Python大數據分析
相關推薦

2020-10-29 06:02:44

PythonPandasExcel

2023-09-06 15:00:35

Pandas存儲格式

2017-12-21 14:36:10

大數據健身智慧

2022-07-08 06:01:37

D-Tale輔助工具

2021-12-24 10:45:19

PandasLambda數據分析

2009-07-04 10:00:12

電纜傳輸視頻布線

2025-04-03 10:00:00

數據分析Pandas數據合并

2023-10-12 15:02:21

PythonPandas數據分析

2020-06-05 14:29:07

PythonPandas數據分析

2024-11-13 15:22:36

Python列表切片

2023-08-11 09:00:00

2023-01-12 15:25:51

Curve數據存儲

2023-05-09 07:53:18

2013-04-12 09:44:03

大數據存儲云計算

2013-04-18 10:34:13

大數據存儲云計算

2020-03-19 15:11:14

Pandas數據分析代碼

2025-06-06 08:35:41

2011-07-20 13:52:31

數據安全數據存儲

2012-03-15 09:54:27

Windows操作系統Windows Ser

2025-06-12 07:13:00

數據庫MySQLPump
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产欧美一区二区精品忘忧草 | 亚洲欧美日韩精品久久亚洲区 | av在线影院 | 在线2区 | 日韩av一区二区在线观看 | 91视频免费在观看 | 91精品国产91久久久久福利 | 国产成人综合一区二区三区 | 午夜电影合集 | av特级毛片| 天天艹日日干 | 国产精品视频一 | 国产免费观看一级国产 | 色吊丝在线 | 午夜三区 | 在线视频三区 | 狠狠爱网址 | 成人精品一区亚洲午夜久久久 | 我要看黄色录像一级片 | 亚洲成人自拍 | 午夜精品在线观看 | a精品视频 | 日韩中文字幕视频在线 | 亚洲人成人一区二区在线观看 | 日韩视频91 | 美女久久视频 | 高清久久久 | 久久高清国产 | 欧美日韩一区二区三区在线观看 | 亚洲视频中文 | 精品国产一区二区三区久久久久久 | 性生生活大片免费看视频 | 欧美日韩一区二区三区四区五区 | 91久久久久久久久久久久久 | 欧美日韩亚洲系列 | 欧美日韩黄色一级片 | 天天操天天舔 | 欧美日韩视频在线播放 | 欧美成人a | 亚洲伊人久久综合 | 夜夜av |