利用Python進行數據分析 第6章 數據加載、存儲與文件格式(2)

6.2 二進制數據格式sql

實現數據的高效二進制格式存儲最簡單的辦法之一,是使用Python內置的pickle序列化。數據庫

pandas對象都有一個用於將數據以pickle格式保存到磁盤上的to_pickle方法:json

經過pickle直接讀取被pickle化的數據,或使用更爲方便的pandas.read_pickle:數組

Ps:pickle僅建議用於短時間存儲格式。因其很難保證該格式是永遠穩定的。服務器

pandas內置支持兩個二進制數據格式:HDF5和MessagePack。pandas或Numpy數據的其餘存儲格式有:分佈式

  • bcolz:一種可壓縮的列存儲二進制格式,基於Blosc壓縮庫
  • Feather:跨語言的列存儲文件格式。其使用了Apache Arrow的列式內存格式。 

6.2.1 使用HDF5格式函數

HDF5是一種存儲大規模科學數組數據的很是好的文件格式。它可被做爲C標準庫,帶有許多語言的接口,如Java、Python和Matlab等。工具

HDF5中的HDF指的是層次型數據格式。每一個HDF5文件都含有一個文件系統式的節點結構,使得可以存儲多個數據集並支持元數據。學習

相較其餘簡單格式,HDF5支持多種壓縮器的即時壓縮,還能更高效地存儲重複模式數據。對於很是大地沒法直接放入內存的數據,HDF5能夠高效地分塊讀寫。網站

pandas提供地高級接口HDFStore類,能夠像字典同樣處理低級的細節,能夠簡化存儲Series和DataFrame對象。(此外,也可用PyTables或h5py庫直接訪問HDF5文件,不如HDFStore高級簡便):

Ps:此處須要先安裝tables庫

HDF5文件中的對象能夠經過與字典同樣的API進行獲取:

HDFStore支持兩種存儲模式,‘fixed’和‘table’。後者一般會更慢,可是支持使用特殊語法進行查詢操做,以下:

Ps:put是store['obj2'] = frame方法的顯示版本,容許設置其餘選項,如格式。 

  pandas.read_hdf函數能夠快捷使用這些工具:

  

  注意:若是須要處理的數據位於遠程服務器,好比Amazon S3或HDFS,使用專門爲分佈式存儲(好比Apache Parquet)的二進制格式也許更加合適。

  如須要本地處理海量數據,需好好研究PyTables和h5py。因爲許多數據分析問題都是IO密集型(非CPU密集型),利用HDF5這類工具能顯著提高應用程序的效率。(HDF5不是數據庫,是最適合用做「一次寫屢次讀」的數據集)

 

6.2.2 讀取Microsoft Excel文件

pandas的ExcelFile類或pandas.read_excel函數支持讀取存儲在Excel2003(或更高版本)中的表格型數據。

這兩個工具分別使用擴展包xlrd和openpyxl讀取XLS和XLSX文件。需安裝這兩個包。

1)建立一個實例

2)用read_excel讀取表單中的數據到DataFrame:

3)也可將文件名傳遞到pandas.read_excel:

問題:如何一次性同時讀取一個文件中的多個表單?

    如何同時讀取同一個excl中的多個sheet?

4)若是要將pandas數據寫入爲Excel格式,你必須首先建立一個ExcelWriter,而後用pandas對象的to_excel方法將數據寫入其中:

ps:將frame中的數據copy到ex2.xlsx中

Ps:也可不使用ExcelWriter,而是傳遞文件的路徑到to_excel

結果:

 

 

6.3 Web APIs交互

許多網站有一些經過JSON或其餘格式提供數據的公共API。經過Python訪問這些API的方法不少,較爲簡單的方法(比較推薦的方法)是requests包。

如,搜索最新的30個GitHub上的pandas主題,能夠發一個HTTP GET請求,使用requests擴展庫:

響應對象的json方法會返回一個包含被解析過的JSON字典,加載到一個Python對象中:

data中的每一個元素都是一個包含全部GitHub主題頁數據的字典。能夠直接傳遞數據到DataFrame,並提取感興趣的字段。

 

6.4 數據庫交互

 

而後插入幾行數據:

從表中選取數據時, 大部分Python SQL驅動器(PyODBC、psycopg二、MySQLdb、pymssql等)都會返回一個元組列表:

可將這個元組列表傳給DataFrame構造器,但還須要列名(位於光標的description屬性中):

若是不想每查一次數據庫就重寫一次,可以使用另外一個流行的Python SQL工具SQLAlchemy項目。pandas有一個read_sql函數,能夠輕鬆的從SQLAlchemy鏈接讀取數據。

以下,使用SQLAlchemy鏈接SQLite數據庫,並從以前建立的表讀取數據:

 (這一塊須要深刻學習)

 

6.5 總結

訪問數據一般是數據分析的第一步。本章已經介紹學習了一些有用的工具,接下來的章節中,將深刻研究數據規整、數據可視化、時間序列分析和其餘主題。

相關文章
相關標籤/搜索