1. 程式人生 > >使用pandas讀取excel

使用pandas讀取excel

本文為作者原創,未經允許不得擅自轉載。

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為起始

    ,比如sheet_name = 1代表第2個工作表。

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

歡迎搜尋今日頭條“海闊天空愛閱讀”,欣賞更多文章~~