使用pandas讀取excel
阿新 • • 發佈:2018-12-18
本文為作者原創,未經允許不得擅自轉載。
Excel是微軟的經典之作,在日常工作中的資料整理、分析和視覺化方面,有其獨到的優勢,尤其在你熟練應用了函式和資料透視等高階功能之後,Excel可以大幅度提高你的工作效率。但如果資料量超大,Excel的劣勢也就隨之而來,甚至因為記憶體溢位無法開啟檔案,後續的分析更是難上加難。那麼,有什麼更好的解決辦法嗎?工欲善其事,必先利其器,在這裡我們介紹使用Python的pandas資料分析包來解決此問題。
pd.read_excel(io, sheet_name=0, header=0, names=None, index_col=None, usecols=None, squeeze=False,dtype=None, engine=None, converters=None, true_values=None, false_values=None, skiprows=None, nrows=None, na_values=None, parse_dates=False, date_parser=None, thousands=None, comment=None, skipfooter=0, convert_float=True, **kwds)
pandas讀取Excel後返回DataFrame,接下來我們就pd.read_excel()的常用引數進行詳細解析。
目錄
【文中使用英超、西甲的排名積分榜及射手榜作為原始資料~~~】
1、io,Excel的儲存路徑
- 建議使用英文路徑以及英文命名方式。
import pandas as pd
io = r'C:\Users\Administrator\Desktop\data.xlsx'
2、sheet_name,要讀取的工作表名稱
- 可以是整型數字、列表名或SheetN,也可以是上述三種組成的列表。
-
整型數字:目標sheet所在的位置,以0為起始
data = pd.read_excel(io, sheet_name = 1)
data.head()
- 列表名:目標sheet的名稱,中英文皆可。
data = pd.read_excel(io, sheet_name = '英超射手榜')
data.head()
- SheetN:代表第N個sheet,S要大寫,注意與整型數字的區別。
data = pd.read_excel(io, sheet_name = 'Sheet5')
data.head()
- 組合列表: sheet_name = [0, '英超射手榜', 'Sheet4'],代表讀取三個工作表,分別為第1個工作表、名為“英超射手榜”的工作表和第4個工作表。顯然,Sheet4未經重新命名。
- sheet_name 預設為0,取Excel第一個工作表。如果讀取多個工作表,則顯示表格的字典。對於初學者而言,建議每次讀取一個工作表,然後進行二次整合。
data = pd.read_excel(io, sheet_name = ['英超積分榜', '西甲積分榜'], nrows = 5)
# sheet_name = ['英超積分榜', '西甲積分榜'] ,返回兩個工作表組成的字典
data
3、header, 用哪一行作列名
- 預設為0 ,如果設定為[0,1],則表示將前兩行作為多重索引。
data = pd.read_excel(io, sheet_name = '英超積分榜', header = [0,1])
# 前兩行作為列名。
data.head()
4、names, 自定義最終的列名
- 一般適用於Excel缺少列名,或者需要重新定義列名的情況。
- 注意:names的長度必須和Excel列長度一致,否則會報錯。
data = pd.read_excel(io, sheet_name = '英超射手榜',
names = ['rank','player','club','goal','common_goal','penalty'])
data.head()
5、index_col, 用作索引的列
- 可以是工作表列名稱,如index_col = '排名';
- 可以是整型或整型列表,如index_col = 0 或 [0, 1],如果選擇多個列,則返回多重索引。
data = pd.read_excel(io, sheet_name = '英超射手榜', index_col = '排名')
data.head()
data = pd.read_excel(io, sheet_name = '英超射手榜', index_col = [0, 1])
data.head()
6、usecols,需要讀取哪些列
- 可以使用整型,從0開始,如[0,2,3];
- 可以使用Excel傳統的列名“A”、“B”等字母,如“A:C, E” ="A, B, C, E",注意兩邊都包括。
- usecols 可避免讀取全量資料,而是以分析需求為導向選擇特定資料,可以大幅提高效率。
data = pd.read_excel(io, sheet_name = '西甲射手榜', usecols = [0, 1, 3])
data.head()
data = pd.read_excel(io, sheet_name = '西甲射手榜', usecols = 'A:C, E')
data.head()
# 啊?什麼!!為啥不見C羅??
# 大佬,C羅轉會去尤文圖斯啦~~~~
7、squeeze,當資料僅包含一列
- squeeze為True時,返回Series,反之返回DataFrame。
data = pd.read_excel(io, sheet_name = 'squeeze', squeeze = True)
data.head()
data = pd.read_excel(io, sheet_name = 'squeeze', squeeze = False)
data.head()
8、converters ,強制規定列資料型別
-
converters = {'排名': str, '場次': int}, 將“排名”列資料型別強制規定為字串(pandas預設將文字類的資料讀取為整型),“場次”列強制規定為整型;
-
主要用途:保留以文字形式儲存的數字。
data = pd.read_excel(io, sheet_name = 'converters')
data['排名'].dtype
data = pd.read_excel(io, sheet_name = 'converters', converters = {'排名': str, '場次': float})
data['排名'].dtype
9、skiprows,跳過特定行
- skiprows= n, 跳過前n行; skiprows = [a, b, c],跳過第a+1,b+1,c+1行(索引從0開始);
- 使用skiprows 後,有可能首行(即列名)也會被跳過。
data = pd.read_excel(io, sheet_name = '英超射手榜', skiprows = [1,2,3])
# 跳過第2,3,4行資料(索引從0開始,包括列名)
data.head()
data = pd.read_excel(io, sheet_name = '英超射手榜', skiprows = 3)
data.head()
10、nrows ,需要讀取的行數
- 如果只想瞭解Excel的列名及概況,不必讀取全量資料,nrows會十分有用。
data = pd.read_excel(io, sheet_name = '英超射手榜', nrows = 10)
data
11、skipfooter , 跳過末尾n行
data = pd.read_excel(r'C:\Users\Administrator\Desktop\data.xlsx' ,
sheet_name = '英超射手榜', skipfooter = 43)
# skipfooter = 43, 跳過末尾43行(索引從0開始)
data
歡迎搜尋今日頭條“海闊天空愛閱讀”,欣賞更多文章~~