給自己的Python小筆記 - 數據處理必備技能 - 將外部數據集Excel檔轉成可操作的DataFrame - read_excel() 參數詳細介紹與教學


Github完整程式連結


攝影師:cottonbro,連結:Pexels


嗨嗨,今天來介紹一個我在工作上常用到的一個函式 - pandas.read_excel(),它幫助我讀取Excel檔的資料,並轉換成Python可以進行數據處理的DataFrame格式,是一個非常常用的函式 過去我導入的數據集(Excel檔)幾乎都只有一張工作表work sheet,所以一導入就是我要的資料,但就在距離今天不久前,我同事找我分析某份數據集,但它是在某份Excel檔中的第二個工作表(work sheet)裡,當然也是有很麻煩的解決辦法,就是複製第二張工作表的內容,然後貼到另一份新的Excel檔中,就搞定了,但是我總不能每次都這樣,要是有上萬份的檔案,都要這樣處理,我就Amazing了XD,所以我就想仔細地瞭解一下pandas.read_excel()底下到底有哪些參數可以使用,是否可以幫助我解決這個問題,並把我學習到的記錄下來,幫助自己與有需要的大家,下次遇到這個問題,就能夠輕鬆解決



pandas.read_excel()是要做什麼的?


pandas.read_excel()參數

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, keep_default_na=True, verbose=False, parse_dates=False, date_parser=None, thousands=None, comment=None, skipfooter=0, convert_float=True, mangle_dupe_cols=True, **kwds)

我接下來會用實作的方式帶大家瞭解這些參數的意義


補充: 如何使用Jupyter Notebook快速取得這個函數的參數,以及這個參數的說明呢?

兩種方式


實作用的數據介紹

這份是我自己捏造的數據集喔,我有放在Github上,大家可以下載下來當練習用,這份Excel檔中,有三頁工作表,如下圖第一張工作表是顧客的基本資料,第二張是消費記錄表,第三張是旅遊記錄表

圖一: 數據集Excrl檔中 - 有三頁工作表



圖二: 第一張工作表



圖三: 第二張工作表



圖四: 第三張工作表





參數的介紹與實作

1. io: 欲導入的Excel檔路徑與檔名,像是io = "填入位置路徑 + 檔名",也可以直接省略io =,直接填入位置路徑加檔名就好

程式碼範例

## 導入Pandas 套件
import pandas as pd
​
## 讀取檔案
df = pd.read_excel('data/dataset_example.xlsx')
​
## 顯示資料
df

執行結果




2. sheet_name(str, int, list, or None, default 0) : 讀取指定的工作表

可以傳入參數的格式

程式碼範例

## 導入pandas套件
import pandas as pd
​
## 讀取第三章工作表
a_int = pd.read_excel('data/dataset_example.xlsx', sheet_name = 2)
​
## 讀取'Consumption_Record'工作表
b_string = pd.read_excel(io = 'data/dataset_example.xlsx', sheet_name = 'Consumption_Record')
​
## 讀取第一張與第三張的工作表
c_list = pd.read_excel(io = 'data/dataset_example.xlsx', sheet_name = [0,2])
​
## 讀取第三張與'Consumption_Record'工作表
d_list = pd.read_excel(io = 'data/dataset_example.xlsx', sheet_name = [2, 'Consumption_Record'])
​
## 讀取全部的工作表
e_all = pd.read_excel(io = 'data/dataset_example.xlsx', sheet_name = None)

執行結果



## 顯示數據
#c_list[0]
c_list[2]
## 顯示數據
#d_list[2]
d_list['Consumption_Record']

執行結果




3. header(int, list of int, default 0): 指定哪一列為最上方的列名


參數可以傳入的格式

## 導入pandas套件
import pandas as pd
​
## 讀取第一張工作表,且以第一列當列名
a_int = pd.read_excel('data/dataset_example.xlsx', header = 0)
​
## 讀取第一張工作表,且以第三列為列名
b_int = pd.read_excel('data/dataset_example.xlsx', header = 2)
​
## 讀取第一張工作表,且以第一,二,三列當列名
c_list = pd.read_excel('data/dataset_example.xlsx', header = [0,1,2])
​
## 讀取第一張工作表,且不以任何數據列當列名
d = pd.read_excel('data/dataset_example.xlsx', header = None)

執行結果





4. names(array-like, default None): 指定一個自定義的列名

可以傳入參數的格式

## 導入pandas套件
import pandas as pd
​
a_list = pd.read_excel('data/dataset_example.xlsx', names = ['顧客編號', '姓名', '年齡', '身高', '體重', 
                              '性別', '職業'])
​
## 顯示數據
a_list

執行結果



5. nrows(int default None): 指定欲讀取前多少行

可以傳入參數的格式

## 導入pandas套件
import pandas as pd
​
## 只導入前四行數據
a_int = pd.read_excel('data/dataset_example.xlsx', nrows = 4)
​
## 顯示數據
a_int

執行結果




6. na_values(scaler, str, list-like, or dict, default None): 將指定的欄位字串,改成NaN

可以傳入參數的格式

## 導入pandas套件
import pandas as pd
​
## 將所有'M'的欄位改成NaN 
a_str = pd.read_excel('data/dataset_example.xlsx', na_values = 'M')
​
## 顯示數據
a_str

執行結果




7. keep_default_na(bool, default True): 是否將原本為空值的數據導入,並給予NaN

可以傳入參數的格式

## 導入pandas套件
import pandas as pd
​
## 不要傳入有空值的數據
a_bool = pd.read_excel('data/dataset_example.xlsx', keep_default_na = False)
​
## 顯示數據
a_bool

執行結果




8. skiprows(list-like): 將指定的行數跳過不導入進來


可以傳入參數的格式

## 導入pandas套件
import pandas as pd
​
## 跳過第二行
a_int = pd.read_excel('data/dataset_example.xlsx', skiprpws = 2)
​
## 跳過1,3,6行
b_list = pd.read_excel('data/dataset_example.xlsx', skiprpws = [1,3,6])
​
## 跳過偶數行
c_func = pd.read_excel('data/dataset_example.xlsx', skiprpws = lambda x: x%2 == 0)

執行結果




9. index_col(int, list of int, default None): 指定哪一列為索引列


可以傳入參數的格式

## 導入pandas套件
import pandas as pd
​
## 把第一列當成索引列
a_int = pd.read_excel('data/dataset_example.xlsx', index_col = 0)
​
## 不把數據中任何一列當成索引列
b_none = pd.read_excel('data/dataset_example.xlsx', index_col = None)
​
## 把第一,四,六列當成索引列
c_list = pd.read_excel('data/dataset_example.xlsx', index_col = [0,3,5])

執行結果




10. true_values & false_values(list, default None): 指定數據中的哪些值,為True或False

可以傳入參數的格式

## 導入pandas套件
import pandas as pd
​
## 將數據集中的'M'改為True,'F'改為Fasle
a_list = pd.read_excel('data/dataset_example.xlsx', true_values = ['M'], false_values = ['F'])
​
## 顯示數據
a_list

執行結果




11. dtype(Type name or dict of column -> type, default None): 改變數據類型,預設為None,代表不改變原數據類型

可以傳入參數的格式



原本的數據類型

## 導入pandas套件 
import pandas as pd
​
## 導入原本數據的前七行數據
a = pd.read_excel('data/dataset_example.xlsx', nrows = 7)
​
## 顯示數據資訊
a.info()

更改過後的數據類型:先將最後一列NaN值拿掉,並將Age, Height 和 Weight改為浮點數類型

## 導入pandas套件
import pandas as pd
​
## 先將最後一列有NaN值得拿掉,並將Age、Height和Weight改為浮點數類型
a = pd.read_excel('data/dataset_example.xlsx', nrows = 7, dtype = {2: 'float64', 3:'float64', 4:'float64'})
​
## 顯示數據資訊
a.info()

執行結果




12. usecols(int, str, list-like, or callable default None): 指定讀取excel中哪些列

可以傳入參數的格式

## 導入pandas套件
import pandas as pd
​
## 指定解析第1與4列
a_list = pd.read_excel('data/dataset_example.xlsx', usecols = [0,3])
​
## 指定解析A列到C列
a_str1 = pd.read_excel('data/dataset_example.xlsx', usecols = 'A:C')
​
## 指定解析A列到C列
a_str2 = pd.read_excel('data/dataset_example.xlsx', usecols = 'A,C')
​
## 指定解析A列、B列和D到F列
a_str3 = pd.read_excel('data/dataset_example.xlsx', usecols = 'A,B ,D:F')

執行結果




13. squeeze(bool, default False): 當指定解析只有一列時,會回傳成Series格式


可以傳入參數的格式

## 導入pandas套件
import pandas as pd
​
## 指定解析一列,並回傳成Series格式
a = pd.read_excel('data/dataset_example.xlsx', usecols = [2], squeeze = True)
​
## 顯示數據類型
print(type(a))
​
## 顯示數據
a

執行結果




14. engine(str, default None): 使用哪種的第三方解析庫,都是用來解析Excel檔的

可以傳入參數的格式



15. converters(dict, default None): 使用函數來對指定的列,進行自定義的數據處理,可以使用Python的def或lambda方法

可以傳入參數的格式

## 導入pandas套件
import pandas as pd
​
##將Customer_id那一列都加上100,然後Age那一列,在後面都加上years old
a = pd.read_excel('data/dataset_example.xlsx', 
         converters = {0: lambda x: x+100, 2: lambda x: str(x) + " years old"})
​
## 顯示數據
a

執行結果






當然還有一些參數我沒有介紹到,但這邊列出了許多我們比較常用到的參數,如果大家想瞭解更多,可以直接使用help(pandas.read_excel)這個方法來查詢所有參數的用法說明喔,對這個方法有了很大的了解後,日後我們需要導入Excel檔的時候,就能在導入前先進行初步的數據處理了,像是我們可以先指定好要解析導入哪些列,才不用通通都導入後,再把用不到的列拿掉,如果遇到擁有很多工作表的時候,也能輕鬆指定我們欲導進來的工作表喔



Reference

https://zhuanlan.zhihu.com/p/142972462

https://blogs.csdn.net/brucewong0516/article/details/79096633