熱線電話:13121318867

登錄
首頁精彩閱讀pandas數據處理:常用卻不甚了解的函數,pd.read_excel()
pandas數據處理:常用卻不甚了解的函數,pd.read_excel()
2020-06-01
收藏

人們經常用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參數沒有默認值,必須傳入。

舉個例子:

輸出結果:

sheet_name參數

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

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

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

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

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

指定另一個位置的sheet:

輸出結果:

輸出結果,能夠看到結果和sheet_name=1的結果是一樣的:

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

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

sheet_name參數的其他設置

輸出結果:

輸出結果:

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

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

header參數

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

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

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

是這種效果(截取部分數據圖像):

header參數可以有效的解決這個問題,可以看到行標簽為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()函數參數的介紹先到這里,剩下的參數在后續的文章中接續介紹哦。

數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢