pandas HDF5與EXCEL文件


一、HDF5

HDF5是一個備受好評的文件格式,廣泛用於存儲大量的科學計算數組。很多數據分析的實際工作中困難都在於I/O密集,而不是CPU密集,使用HDF5這樣的工具可以大大加速你的應用。它以C庫的形式提供,並且具有許多其它語言的接口,包括Java、MATLAB和Python。HDF5中的HDF代表分層數據格式。每個HDF5文件可以存儲多個數據集並且支持元數據。支持多種壓縮模式的即時壓縮,使得重復模式的數據可以更高效地存儲。HDF5適用於處理不適合在內存中存儲地超大型數據,可以使你高效讀寫大型數據的一小塊。

要注意的是HDF5並不是數據庫,它是一種適合一次寫入多次讀取的數據集。盡管數據可以在任何時間添加到文件中,但如果多個寫入者持續寫入,文件可能會損壞。

在外部,可以通過使用PyTables或h5py等庫直接訪問HDF5文件,但Pandas提供了一個高階的接口,可以簡化存儲過程。

Pandas使用HDFStore類來實現這一功能,類似字典一樣的工作方式:

In [90]: df = pd.DataFrame({'a':np.random.randn(100)})  # 有100行
In [91]: df.head() # 看看前5行
Out[91]: a 0 -0.917062
1  0.797327
2  0.659787
3 -0.779638
4  0.550464 In [92]: store = pd.HDFStore('mydata.h5') # 生成HDF5文件
In [93]: store['obj1'] = df  # 以類似字典的方式,向文件里寫入內容
In [94]: store['obj1_col'] = df['a'] # 再寫一點
In [95]: store   # 看看信息,在當前工作目錄下,你可以找到這個文件
Out[95]: <class 'pandas.io.pytables.HDFStore'> File path: mydata.h5

既然是類似字典的工作方式,那當然也可以像字典那樣索引數據:

In [97]: store['obj1'] Out[97]: a 0 -0.917062
1   0.797327
2   0.659787
3  -0.779638
4   0.550464 .. ... 95 -2.042226
96  1.286631
97  0.487709
98 -0.202580
99  1.619085 [100 rows x 1 columns]

HDFStore支持兩種工作模式,‘fixed’和‘table’。table的速度更慢,但支持一種類似數據庫SQL語言的查詢操作:

In [98]: store.put('obj2',df,format='table') # put是賦值的顯式版本,允許我們設置其它選項
In [99]: store.select('obj2', where=['index >=10 and index <= 15'])  # 類似SQl語言的查詢操作,要注意空格的位置
Out[99]: a 10 -1.430696
11 -0.616732
12 -0.643991
13 -0.004270
14  0.797136
15 -0.175095 In [100]: store.close() # 關閉文件

除此之外,Padas還提供了以上操作的快捷方式:

In [101]: df.to_hdf('mydata.h5','obj3', format='table') In [102]: pd.read_hdf('mydata.h5', 'obj3' ,where=['index < 5']) Out[102]: a 0 -0.917062
1  0.797327
2  0.659787
3 -0.779638
4  0.550464

二、Excel文件

Pandas支持Excle 2003或更高版本文件的讀寫。在內部,這需要使用附加包xlrd和openpyxl來分別讀取XLS和XLSX文件。如果你的環境中沒有這兩個包,可能需要使用pip或者conda手動安裝一下。

使用很簡單,看下面的例子:

In [104]: xlsx = pd.ExcelFile('d:/ex1.xlsx') # 打開excel文件 In [105]: pd.read_excel(xlsx, 'Sheet1') # 讀取指定的表
Out[105]: a b c d message 0 1   2   3   4 hello 1  5   6   7   8 world 2  9  10  11  12     foo

或者使用更簡潔的語法:

In [106]: df = pd.read_excel('d:/ex1.xlsx', 'Sheet1') In [107]: df Out[107]: a b c d message 0 1   2   3   4 hello 1  5   6   7   8 world 2  9  10  11  12     foo

將pandas數據寫回到excel文件中時,你必須先生成一個ExcelWriter,然后使用to_excel方法將數據寫入:

In [108]: writer = pd.ExcelWriter('d:/ex2.xlsx') # 生成文件 In [109]: df.to_excel(writer, 'Sheet1') # 寫入 In [110]: writer.save()  #關閉文件

當然,也可以使用快捷操作:

In [112]: df.to_excel('d:/ex3.xlsx')


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM