一文看懂用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版)