一文看懂用Python讀取Excel數據

  • 2019 年 11 月 11 日
  • 筆記

導讀:現有的Excel分為兩種格式:xls(Excel 97-2003)和xlsx(Excel 2007及以上)。

Python處理Excel文件主要是第三方模組庫xlrd、xlwt、pyexcel-xls、xluntils和pyExcel-erator等,此外Pandas中也帶有可以讀取Excel文件的模組(read_excel)。

基於擴展知識的目的,本文使用xlrd模組讀取Excel數據。

作者:宋天龍

來源:大數據DT(ID:bigdatadt)

首先安裝該庫,Anaconda中已經默認安裝了xlrd和xlwt模組,用於Excel的讀寫操作。如果讀者系統環境中沒有,可以在Jupyter輸入以下命令安裝。

!pip install xlrd

然後我們以「附件-chapter2」文件夾中的demo.xlsx數據文件為例,介紹該庫的具體應用。

附件下載地址:

http://www.dataivy.cn/book/python_book_v2.zip

數據概覽如圖所示。

▲數據文件內容

import xlrd  # 導入庫  # 打開文件  xlsx = xlrd.open_workbook('demo.xlsx')  # 查看所有sheet列表  print('All sheets: %s' % xlsx.sheet_names())

上述程式碼中,我們先讀取一個Excel文件,輸出文件的sheet名稱列表。由於裡面只有一張sheet,一次只有一個值。

結果為:

All sheets: ['Sheet1']

查看sheet1的數據概況:

sheet1 = xlsx.sheets()[0]    # 獲得第1張sheet,索引從0開始  sheet1_name = sheet1.name    # 獲得名稱  sheet1_cols = sheet1.ncols   # 獲得列數  sheet1_nrows = sheet1.nrows  # 獲得行數  print('Sheet1 Name: %snSheet1 cols: %snSheet1 rows: %s' % (sheet1_name, sheet1_cols, sheet1_nrows))

我們分別獲取了第1張sheet(雖然裡面只有一張,但在多sheet情況下可通過索引循環輸出)的名稱、列數量和行數據。結果如下:

Sheet1 Name: sheet1  Sheet1 cols: 4  Sheet1 rows: 10

查看sheet1的特定切片數據:

sheet1_nrows4 = sheet1.row_values(4)  # 獲得第4行數據  sheet1_cols2 = sheet1.col_values(2)   # 獲得第2列數據  cell23 = sheet1.row(2)[3].value       # 查看第3行第4列數據  print('Row 4: %snCol 2: %snCell 1: %sn' % (sheet1_nrows4, sheet1_cols2, cell23))

通過查看特定行、列或行列組合的索引來輸出,結果如下:

Row 4: ['431381197408191515', '有效', 42725.0, '深圳市']  Col 2: ['Create_Time', 42725.0, 42725.0, 42725.0, 42725.0, 42725.0, 42725.0, 42725.0, 42725.0, 42725.0]  Cell 1: 深圳市

查看sheet1的數據明細:

for i in range(sheet1_nrows):  # 逐行列印sheet1數據      print(sheet1.row_values(i))

逐條輸出結果,部分結果如下(為了節約篇幅,中間的數據內容以…代替):

['ID_number', 'Status', 'Create_Time', 'Business_City']  ['431381198109106573', '有效', 42725.0, '深圳市']  ['431381198809122734', '有效', 42725.0, '深圳市']  …  ['431381198901176911', '有效', 42725.0, '深圳市']  ['43138119870827275X', '有效', 42725.0, '深圳市']

上述操作只是將數據從Excel中讀取出來,將讀取的數據轉換為數組便可以進行矩陣計算。由於矩陣計算大多是基於數值型數據實現的,因此上述數據將無法適用於大多數科學計算場景,這點需要注意。

總結:在企業實際場景中,由於Excel本身的限制和適用,其無法存儲和計算過大(例如千萬級的數據記錄)的數據量,並且Excel本身也不是為了海量數據的應用而產生的,因此,Excel可以作為日常基本數據處理、補充數據來源或者匯總級別的數據進行讀取,同時也可以作為數據結果展示的載體,這種應用下對於大量數值表格的應用效果非常好。

關於作者:宋天龍,深大數據技術專家,觸脈諮詢合伙人兼副總裁,前Webtrekk中國區技術和諮詢負責人(德國最大在線數據分析服務提供商)。擅長數據挖掘、建模、分析與運營,精通端到端數據價值場景設計、業務需求轉換、數據結構梳理、數據建模與學習以及數據工程交付。在電子商務、零售、銀行、保險等多個行業擁有豐富的數據項目工作經驗。

本文摘編自《Python數據分析與數據化運營》(第2版),經出版方授權發布。

延伸閱讀《Python數據分析與數據化運營》

(第2版)