天天看點

一個參數一個Excel表,讓你玩轉Pandas中read_excel()表格讀取!

一個參數一個Excel表,讓你玩轉Pandas中read_excel()表格讀取!

本文大綱

我覺得很有必要講述這個文章,進行資料處理的第一步就是Python資料讀取。但是你可能沒想到,在進行資料讀取的同時,我們其實可以配合相關參數做很多事兒,這對于後續的資料處理都是極其有幫助。

read_excel()函數和read_csv()函數,在參數上面有很多相同點,是以我就以read_excel()函數為例,進行詳細的說明。

一個參數一個Excel表,讓你玩轉Pandas中read_excel()表格讀取!

參數詳解

1)sheet_name參數

  • 含義:選擇要讀取的sheet表;
  • sheet_name=0表示預設讀取第一個sheet表,等同于sheet_name=“sheet名稱”;
  • sheet_name=[“sheet名”,0]會傳回一個字典,然後可以利用鍵擷取每一個sheet表中的資料;
  • sheet_name=None也會傳回一個字典,但是會傳回全部的sheet表;

① sheet_name=0和sheet_name="Sheet1"

# 下面這兩個讀取方式等同。
#df2 = pd.read_excel("readexcel.xlsx",sheet_name=0)
df2 = pd.read_excel("readexcel.xlsx",sheet_name="Sheet1")
df2
           

結果如下:

一個參數一個Excel表,讓你玩轉Pandas中read_excel()表格讀取!

② sheet_name=[“sheet名”,0]

df2 = pd.read_excel("readexcel.xlsx",sheet_name=[0,1])
df2
           

結果如下:

一個參數一個Excel表,讓你玩轉Pandas中read_excel()表格讀取!

接着,我們可以使用鍵值對的方式,擷取每個sheet表中的資料。

一個參數一個Excel表,讓你玩轉Pandas中read_excel()表格讀取!

注:關于sheet_name=None效果同上,隻不過會傳回所有的sheet表中的資料。

2)header參數

  • 含義:指定某一行作為表頭;
  • header=None專門針對沒有表頭的表,這也是預設值;
  • header=1指定第一行作為表頭;
  • header=[]主要針對複合表頭的情況;

① header=None

df3 = pd.read_excel("header.xlsx",header=None)
df3
           

結果如下:

一個參數一個Excel表,讓你玩轉Pandas中read_excel()表格讀取!

②  header=1

df3 = pd.read_excel("header.xlsx",sheet_name=2,header=1) 
df3
           

結果如下:

一個參數一個Excel表,讓你玩轉Pandas中read_excel()表格讀取!

③ header=[]

df3 = pd.read_excel("header.xlsx",sheet_name=3,header=[0,1],index_col=0) 
df3
           

結果如下:

一個參數一個Excel表,讓你玩轉Pandas中read_excel()表格讀取!

注意:上述用到了一個index_col參數,這個參數用于指定作為行索引的列,我就不詳細舉例了,看看下圖。

一個參數一個Excel表,讓你玩轉Pandas中read_excel()表格讀取!

3)usecols參數

  • 含義:選擇讀取一張表中的指定列;
  • usecols=None也是預設情況,表示讀取所有列;
  • usecols=[A,C]表示隻選取A列和C列。usecols=[A,C:E]表示選擇A列,C列、D列和E列;
  • usecols=[0,2]表示隻選擇第一列和第三列;
  • usecols=["列名1","列名2"...]這也是推薦使用的一種寫法;

① usecols=None

df4 = pd.read_excel("usecols.xlsx",usecols=None) # 預設
df4
           

結果如下:

一個參數一個Excel表,讓你玩轉Pandas中read_excel()表格讀取!

② usecols=[A,C]

df4 = pd.read_excel("usecols.xlsx",usecols="A,C") 
df4
           

結果如下:

一個參數一個Excel表,讓你玩轉Pandas中read_excel()表格讀取!

③ usecols=[A,C:D]

df4 = pd.read_excel("usecols.xlsx",usecols="A,C:D") 
df4
           

結果如下:

一個參數一個Excel表,讓你玩轉Pandas中read_excel()表格讀取!

④ usecols=[0,2]

df4 = pd.read_excel("usecols.xlsx",usecols=[0,2]) 
df4
           

結果如下:

一個參數一個Excel表,讓你玩轉Pandas中read_excel()表格讀取!

⑤ usecols=["列名1","列名2"...]

這種方式照說是沒有任何問題的,但是在我這邊運作總是無結果,我很納悶,大家可以下去試試。

4)names參數

  • 含義:如果表中沒有表頭,可以用這個參數添加一個标題。如果表中有表頭,可以用這個參數修改标題。
names = ["月份","國文","英語"]
df6 = pd.read_excel("names.xlsx",header=None,names=names) 
df6
           

結果如下:

一個參數一個Excel表,讓你玩轉Pandas中read_excel()表格讀取!

5)dtype參數

  • 含義:讀取資料時,設定每一列的資料類型(重要);
  • dtype={}傳入一個字典,類似于{"列名":"類型"};
df7 = pd.read_excel("dtype.xlsx")
df7.dtypes
------------------------------------------------------
df7 = pd.read_excel("dtype.xlsx",dtype={"年齡":"str"})
df7.dtypes
           

結果如下:

一個參數一個Excel表,讓你玩轉Pandas中read_excel()表格讀取!

6)parse_dates參數

  • 含義:指定将哪些列,解析為日期格式;
  • parse_dates=True是專門用于将行索引,解析為日期格式;
  • parse_dates=[0,1,2,3,4]和parse_dates=["列名1","列名2","列名3","列名4"],都是将指定列一起解析為日期格式;
  • parse_dates=[[1,2,3]]和parse_dates=[["年","月","日"]],都是将多個列,解析為單個日期列;
  • parse_dates={"日期":[1,2,3]}不僅将多個日期列解析為單個日期列,同時還為這一列命名;

① parse_dates=True

df8 = pd.read_excel("parse_dates",index_col=2,parse_dates=True)
df8.index
           

結果如下:

一個參數一個Excel表,讓你玩轉Pandas中read_excel()表格讀取!

② parse_dates=[0,1]和parse_dates=["列名1","列名2"]

df8 = pd.read_excel("parse_dates",parse_dates=[0,1,2,3,4])
df8.dtypes
# 這個代碼效果同上
df8 = pd.read_excel("parse_dates.xlsx",
                    parse_dates=["數值日期1","文本日期2","文本日期3","文本日期4","文本日期5"])
           

結果如下:

一個參數一個Excel表,讓你玩轉Pandas中read_excel()表格讀取!

③ parse_dates=[[1,2,3]]和parse_dates=[["年","月","日"]]

#df8 = pd.read_excel("parse_dates.xlsx",sheet_name="Sheet2",parse_dates=[["年","月","日"]])
df8 = pd.read_excel("parse_dates.xlsx",sheet_name="Sheet2",parse_dates=[[1,2,3]])
df8
           

結果如下:

一個參數一個Excel表,讓你玩轉Pandas中read_excel()表格讀取!

④ parse_dates={"日期":[1,2,3]}

df8 = pd.read_excel("parse_dates.xlsx",sheet_name="Sheet2",parse_dates={"日期":[1,2,3]})
df8
           

結果如下:

一個參數一個Excel表,讓你玩轉Pandas中read_excel()表格讀取!

7)date_parser參數

  • 含義:利用lambda函數,将某個字元串列,解析為日期格式;
  • 一般是配合parse_dates參數,一起使用;
df9 = pd.read_excel("date_parser.xlsx",parse_dates=[1],
                    date_parser=lambda x: pd.to_datetime(x,format="%Y年%m月%d"))
print(df9.dtypes)
df9
           

結果如下:

一個參數一個Excel表,讓你玩轉Pandas中read_excel()表格讀取!

8)na_values參數

  • 含義:用于将某些特定的值,解析為NaN值,然後便于我們後面做缺失值的處理;
  • na_values=”值1“表示将所有資料中值1全部替換為NaN;
  • na_values=[”值1“,"值2"]表示将所有資料中值1、值2全部替換為NaN;
  • na_values={"列1":[”值1“,"值2"]}表示将第一列中所有的值1、值2全部替換為NaN;

① na_values=”值1“

df10 = pd.read_excel("na_values.xlsx",na_values=" ")
df10
           

結果如下:

一個參數一個Excel表,讓你玩轉Pandas中read_excel()表格讀取!

② na_values=[”值1“,"值2"]

df10 = pd.read_excel("na_values.xlsx",na_values=["a","0"])
df10
           

結果如下:

一個參數一個Excel表,讓你玩轉Pandas中read_excel()表格讀取!

③ na_values={"列1":[”值1“,"值2"]}

#  隻替換某一列中的某些值為NaN
df10 = pd.read_excel("na_values.xlsx",na_values={"列2":["0"," "]})
df10
           

結果如下:

一個參數一個Excel表,讓你玩轉Pandas中read_excel()表格讀取!

9)converters參數

  • 含義:對某一列使用Lambda函數,進行某種運算;
  • 例如:converters={"工資":lambda x: x + 1000};
df11 = pd.read_excel("converters.xlsx",
                     converters={"位址":lambda x: "中國"+x,"工資":lambda x: x + 1000})
df11
           

結果如下:

一個參數一個Excel表,讓你玩轉Pandas中read_excel()表格讀取!

背景回複"readexcel" 擷取本文所用到的素材!

由于微信平台算法改版,公号内容将不再以時間排序展示,如果大家想第一時間看到我們的推送,強烈建議星标我們和給我們多點點【在看】。星标具體步驟為:

(1)點選頁面最上方“小詹學Python”,進入公衆号首頁。
(2)點選右上角的小點點,在彈出頁面點選“設為星标”,就可以啦。
感謝支援,比心。