作者 | 黃偉呢
來源 | 數據分析與統計學之美
我覺得很有必要講述這個文章,進行數據處理的第一步就是Python數據讀取。但是你可能沒想到,在進行數據讀取的同時,我們其實可以配合相關參數做很多事兒,這對于後續的數據處理都是極其有幫助。
read_excel函數和read_csv函數,在參數上面有很多相同點,因此我就以read_excel函數為例,進行詳細的說明。
含義:選擇要讀取的sheet表;
sheet_name=0表示默認讀取第一個sheet表,等同于sheet_name=“sheet名稱”;
sheet_name=[“sheet名”,0]會返回一個字典,然後可以利用鍵獲取每一個sheet表中的數據;
sheet_name=None也會返回一個字典,但是會返回全部的sheet表;
# 下面這兩個讀取方式等同。
df2 = pd.read_excel("readexcel.xlsx",sheet_name=[0,1])
df2
結果如下:
接着,我們可以使用鍵值對的方式,獲取每個sheet表中的數據。
注:關于sheet_name=None效果同上,隻不過會返回所有的sheet表中的數據。
含義:指定某一行作為表頭;
header=None專門針對沒有表頭的表,這也是默認值;
header=1指定第一行作為表頭;
header=主要針對複合表頭的情況;
df3 = pd.read_excel("header.xlsx",header=None)
df3
結果如下:
df3 = pd.read_excel("header.xlsx",sheet_name=2,header=1)
df3
結果如下:
df3 = pd.read_excel("header.xlsx",sheet_name=3,header=[0,1],index_col=0)
df3
結果如下:
注意:上述用到了一個index_col參數,這個參數用于指定作為行索引的列,我就不詳細舉例了,看看下圖。
含義:選擇讀取一張表中的指定列;
usecols=None也是默認情況,表示讀取所有列;
usecols=[A,C]表示隻選取A列和C列。usecols=[A,C:E]表示選擇A列,C列、D列和E列;
usecols=[0,2]表示隻選擇第一列和第三列;
usecols=["列名1","列名2"...]這也是推薦使用的一種寫法;
df4 = pd.read_excel("usecols.xlsx",usecols=None) # 默認
df4
結果如下:
df4 = pd.read_excel("usecols.xlsx",usecols="A,C")
df4
結果如下:
df4 = pd.read_excel("usecols.xlsx",usecols="A,C:D")
df4
結果如下:
df4 = pd.read_excel("usecols.xlsx",usecols=[0,2])
df4
結果如下:
這種方式照說是沒有任何問題的,但是在我這邊運行總是無結果,我很納悶,大家可以下去試試。
含義:如果表中沒有表頭,可以用這個參數添加一個标題。如果表中有表頭,可以用這個參數修改标題。
names = ["月份","語文","英語"]
df6 = pd.read_excel("names.xlsx",header=None,names=names)
df6
結果如下:
含義:讀取數據時,設置每一列的數據類型(重要);
dtype={}傳入一個字典,類似于{"列名":"類型"};
df7 = pd.read_excel("dtype.xlsx")
df7.dtypes
------------------------------------------------------
df7 = pd.read_excel("dtype.xlsx",dtype={"年齡":"str"})
df7.dtypes
結果如下:
含義:指定将哪些列,解析為日期格式;
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]}不僅将多個日期列解析為單個日期列,同時還為這一列命名;
df8 = pd.read_excel("parse_dates",index_col=2,parse_dates=True)
df8.index
結果如下:
② 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"])
結果如下:
③ 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
結果如下:
df8 = pd.read_excel("parse_dates.xlsx",sheet_name="Sheet2",parse_dates={"日期":[1,2,3]})
df8
結果如下:
含義:利用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
結果如下:
含義:用于将某些特定的值,解析為NaN值,然後便于我們後面做缺失值的處理;
na_values=”值1“表示将所有數據中值1全部替換為NaN;
na_values=[”值1“,"值2"]表示将所有數據中值1、值2全部替換為NaN;
na_values={"列1":[”值1“,"值2"]}表示将第一列中所有的值1、值2全部替換為NaN;
df10 = pd.read_excel("na_values.xlsx",na_values=" ")
df10
結果如下:
df10 = pd.read_excel("na_values.xlsx",na_values=["a","0"])
df10
結果如下:
# 隻替換某一列中的某些值為NaN
df10 = pd.read_excel("na_values.xlsx",na_values={"列2":["0"," "]})
df10
結果如下:
含義:對某一列使用Lambda函數,進行某種運算;
例如:converters={"工資":lambda x: x 1000};
df11 = pd.read_excel("converters.xlsx",
converters={"地址":lambda x: "中國" x,"工資":lambda x: x 1000})
df11
結果如下:
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!