pandas數據處理:常用卻不甚瞭解的函數,pd.read_excel()

在這裏插入圖片描述

人們經常用pandas處理表格型數據,時常需要讀入excel表格數據,很多人一般都是直接這麼用:pd.read_excel(“文件路徑文件名”),再多一點的設置可能是轉義一下路徑中的斜槓,一旦原始的excel表不是很規整,這樣簡單讀入勢必報錯!

其實這個函數有很多參數可以設置,爲了應對各式excel表滿足各種讀入的需求,我們來詳細瞭解下pd.excel()中的主要參數。

首先,認識一下pd.read_excel(),函數的官方文檔是這麼說的:將Excel文件讀取到pandas DataFrame中,支持本地文件系統或URL的’xls’和’xlsx’文件擴展名,帶有這兩種擴展名的文件,函數都可以處理;

然後它的函數完整版長這個樣子:
在這裏插入圖片描述

沒想到吧,它它它…它居然有二十多個參數,是不是有點出乎意料,接下來認識下這些參數都是做什麼用的吧!

io參數

io參數可以接受的有:str,Excel文件,xlrd.Book,路徑對象或類似文件的對象,其中最常用的是str,一般是文件路徑+文件名,需要注意的是文件名字不要漏掉後綴,即文件擴展名,表明文件類型的那個!有時候需要對路徑中的”\”進行轉義,io參數沒有默認值,必須傳入。

舉個例子:

在這裏插入圖片描述

輸出結果:
1

sheet_name參數

sheet_name參數可以接收的有:str,int,list或None,默認0

其中,字符串用於工作表名稱。 整數用於零索引工作表位置。 字符串/整數列表用於請求多個工作表。設置None獲取所有工作表。

有時候一個excel工作簿中包含有很多個sheet工作表,如果不指定默認爲0,數據讀入的時候默認讀入的是第一個位置的sheet。

常用的是指定sheet位置或者名字,還是來個例子:

在這裏插入圖片描述

輸出結果和不指定sheet時的結果是一樣的,因爲默認的就是第0個sheet:

指定另一個位置的sheet:
在這裏插入圖片描述
輸出結果:
1
在這裏插入圖片描述
輸出結果,能夠看到結果和sheet_name=1的結果是一樣的:

1

可以看一下原表中sheet的名字就能理解名字爲data2的sheet正好在第1個位置(名字爲data1的sheet在第0個位置)

1

通過名字讀取另一個sheet就不在這裏贅述了,我們看看這個參數還有兩種可以接收的對象,挨個看下是什麼樣的效果吧。

sheet_name參數的其他設置

在這裏插入圖片描述
輸出結果:
1
在這裏插入圖片描述
輸出結果:
1

能夠看到比上邊只讀入兩個sheet工作表的命令相比,這裏多了data3這個工作表!

綜上,sheet_name空值既可以通過sheet位置也可以通過sheet名字來指定讀入哪個sheet的數據。

header參數

這個參數是用來指定哪一行作爲列名的,默認是第0行,接收的參數可以是整數(指定第幾行作爲列名),可以是有整數組成的列表(指定哪幾行作爲列名,是的,列名可以有多行,是不是有點突破認知?),也可以是None(沒有列名)。

比如這種數據就需要在讀入數據的時候指定哪一行作爲列名:
1

開頭有空行,直接讀取試一下:

在這裏插入圖片描述
是這種效果(截取部分數據圖像):
1

header參數可以有效的解決這個問題,可以看到行標籤爲1的數據纔是我們需要的列名,所以在讀取數據的時候進行設置就可以了:

在這裏插入圖片描述
輸出結果:

1
這樣就符合要求了!

對header參數的其他設置

爲了滿足好奇心,我們也實驗一下其他的參數,比如整數組成的列表,提前預告,讀出來不一定符合業務邏輯要求哦。

在這裏插入圖片描述
輸出結果:
在這裏插入圖片描述

能看到的確有兩行列名!

如果不要列名是什麼樣子呢?
在這裏插入圖片描述
輸出結果:
在這裏插入圖片描述

不指定列名後的效果就是這樣的了!

names參數

官方文檔說這個參數接收 array-like, 默認 None,表示要使用的列名列表,如果不需要列名,請設置header = None,如果header = None和names參數都設置的話,依然會顯示names指定的列名。

還是通過實例來感受下參數的作用吧,爲了節省篇幅,代碼放入截圖中:

如果原始表格中的列名不符合需求,比如上圖中很明顯是進行聚合後系統生成的列名,在讀入數據的時候可以根據需求自定義列名,需要注意的是指定的列名和原數據中的列名是依據位置一一對應的,順序不要亂了!

index_col參數

官方文檔說這個參數接收整數,或者由整數組成的列表,默認是None。

這個參數的作用是指定用哪一列做爲行索引。如果傳給參數的是整數n,則表示指定第n列作爲行索引,如果傳入的是列表,則表示需要指定多列作爲行索引。上一篇文章中介紹了header參數,是指定由哪一行作爲列名,也是傳入整數或者整數組成的列表,可以對比記憶。

來個例子感受一下:

上邊的例子分別採用了默認值None,整數0和列表[0,1]對index_col進行了設置,用法和效果一目瞭然。

usecols參數

看下官方文檔是怎麼說的:該參數接收整數,字符或者類似列表的序列,默認值是None,返回的是列的子集,直白點解釋就是在讀入表格的時候不是所有的列都會被讀入,可以通過usecols參數來設置要把哪些列讀取進來。

  • 如果是None,表示所有的列都會被讀取
  • 如果是整數,表示被讀取進來的最後一列,比如說傳整數n給usecols,那麼最終讀取進來的是第0到第n列,注意不是隻把第n列讀進來。如果像要只讀某一列怎麼辦呢?別急,接着往下看。
  • 如果是列表,表示選取指定的列讀取,比如像要只讀入第n列,這樣就可以usecols=[n],如果是多列,就把多個整數放入一個列表中傳遞給參數。需要留心的是,列表中不止可以傳入整數,也可以是字段名組成的列表。

溫馨提示:如果設置了names參數,注意設置的列名個數要和讀取的列數一致

來個直觀的例子感受下:

結合對參數的文字說明看例子,還是蠻清楚明白的。

squeeze參數

來自官方文檔的解釋:接收布爾值,當取值爲True的時候,如果解析的數據僅包含一列,則返回Series。默認值是False,即只有一列也返回Dataframe。

舉例說明:

如果需要讀進來一個Series,可以通過squeeze參數實現。

dtype參數

慣例還是官方文檔的解釋:輸入表示數據類型的名稱字符或者字典,如果輸入的是字符表示整個表格的數據都轉換成指定的數據類型,如果輸入的是字典,那麼每個字段可以指定不同的數據類型。

來個例子幫助理解:

由於整個表格中既有文本又有數值,如果要設置成統一的數據類型只能設置成字符型了;針對每一列設置不同的數據類型,效果還是很明顯的。

篇幅限制,對pd.read_excel()函數參數的介紹先到這裏,剩下的參數在後續的文章中接續介紹哦。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章