




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第十一章
數(shù)據(jù)預處理在此輸入副標題·數(shù)據(jù)清洗·數(shù)據(jù)合并·數(shù)據(jù)重塑·數(shù)據(jù)轉(zhuǎn)換掌握掌握掌握掌握
1234學習目標掌握數(shù)據(jù)清洗的常見操作掌握數(shù)據(jù)轉(zhuǎn)換的常見操作掌握數(shù)據(jù)合并的常用方法掌握數(shù)據(jù)重塑的常見操作11.111.211.311.4目錄CONTENTS數(shù)據(jù)清洗數(shù)據(jù)合并數(shù)據(jù)重塑數(shù)據(jù)轉(zhuǎn)換
第一部分PART0111.1數(shù)據(jù)清洗數(shù)據(jù)清洗是一項復雜且繁瑣的工作,同時也是整個數(shù)據(jù)分析過程中最為重要的環(huán)節(jié)。數(shù)據(jù)清洗的目的在于提高數(shù)據(jù)質(zhì)量,將臟數(shù)據(jù)清洗干凈,使原數(shù)據(jù)具有完整性、唯一性、權(quán)威性、合法性、一致性等特點。11.1.1前導臟數(shù)據(jù)在這里指的是對數(shù)據(jù)分析沒有實際意義、格式非法、不在指定范圍內(nèi)的數(shù)據(jù)。11.1.1前導空值一般表示數(shù)據(jù)未知、不適用或?qū)⒃谝院筇砑訑?shù)據(jù)。缺失值是指數(shù)據(jù)集中某個或某些屬性的值是不完整的。NoneNaN一般空值使用None表示,缺失值使用NaN表示。11.1.2空值和缺失值的處理Pandas中提供了一些用于檢查或處理空值和缺失值的函數(shù)或方法。使用isnull()和notnull()函數(shù)可以判斷數(shù)據(jù)集中是否存在空值和缺失值。對于缺失數(shù)據(jù)可以使用dropna()和fillna()方法對缺失值進行刪除和填充。11.1.2空值和缺失值的處理isnull()函數(shù)的語法格式如下:上述函數(shù)中只有一個參數(shù)obj,表示檢查空值的對象。isnull()函數(shù)會返回一個布爾類型的值,如果返回的結(jié)果為True,則說明有空值或缺失值,否則為False。(NaN或None映射到True值,其它內(nèi)容映射到False)pandas.isnull(obj)11.1.2空值和缺失值的處理notnull()與isnull()函數(shù)的功能是一樣的,都可以判斷數(shù)據(jù)中是否存在空值或缺失值,不同之處在于,前者發(fā)現(xiàn)數(shù)據(jù)中有空值或缺失值時返回False,后者返回的是True。series_obj=Series([1,None,NaN])#檢查是否不為空值或缺失值pd.notnull(series_obj)0True1False2False11.1.2空值和缺失值的處理dropna()方法的作用是刪除含有空值或缺失值的行或列。axis:確定過濾行或列。
how:確定過濾的標準。thresh:表示有效數(shù)據(jù)量的最小要求。若傳入了2,則是要求該行或該列至少有兩個非NaN值時將其保留。dropna(axis=0,how='any',thresh=None,subset=None,inplace=False)11.1.2空值和缺失值的處理刪除空值或缺失值前后的效果如下圖所示:11.1.2空值和缺失值的處理填充缺失值和空值的方式有很多種,比如人工填寫、熱卡填充等,Pandas中的fillna()方法可以實現(xiàn)填充空值或缺失值。value:用于填充的數(shù)值。method:表示填充方式,默認值為None。limit:
可以連續(xù)填充的最大數(shù)量,默認None。fillna(value=None,method=None,axis=None,inplace=False,limit=None,downcast=None,**kwargs)11.1.2空值和缺失值的處理method參數(shù)不能與value參數(shù)同時使用。11.1.2空值和缺失值的處理有一張表格里存在缺失值,如果使用常量66.0來替換缺失值,那么填充前后的效果如下圖所示。11.1.2空值和缺失值的處理通過fillna()方法填充常量的示例如下:#使用66.0替換缺失值df_obj.fillna('66.0')11.1.2空值和缺失值的處理如果希望A列缺失的數(shù)據(jù)使用數(shù)字“4.0”進行填充,B列缺失的數(shù)據(jù)使用數(shù)字“5.0”來填充,那么填充前后的效果如下圖所示。11.1.2空值和缺失值的處理通過fillna()方法對指定列進行填充的示例如下:#指定列填充數(shù)據(jù)df_obj.fillna({'A':4.0,'B':5.0})11.1.2空值和缺失值的處理如果希望A~D列中按從前往后的順序填充缺失的數(shù)據(jù),那么填充前后的效果如下圖所示。11.1.2空值和缺失值的處理通過fillna()方法采用前向填充的方式替換空值或缺失值,示例如下:#使用前向填充的方式替換空值或缺失值df.fillna(method='ffill')11.1.2空值和缺失值的處理當數(shù)據(jù)中出現(xiàn)了重復值,在大多數(shù)情況下需要進行刪除。11.1.3重復值的處理Pandas提供了兩個函數(shù)專門用來處理數(shù)據(jù)中的重復值,分別為duplicated()和drop_duplicates()方法。duplicated()方法用于標記是否有重復值。drop_duplicates()方法用于刪除重復值。它們的判斷標準是一樣的,即只要兩條數(shù)據(jù)中所有條目的值完全相等,就判斷為重復值。11.1.3重復值的處理duplicated()方法的語法格式如下:subset:用于識別重復的列標簽或列標簽序列,默認識別所有的列標簽。keep:刪除重復項并保留第一次出現(xiàn)的項,取值可以為first、last或False。duplicated(subset=None,keep='first')11.1.3重復值的處理duplicated()方法用于標記Pandas對象的數(shù)據(jù)是否重復,重復則標記為True,不重復則標記為False,所以該方法返回一個由布爾值組成的Series對象,它的行索引保持不變,數(shù)據(jù)則變?yōu)闃擞浀牟紶栔怠?1.1.3重復值的處理對于duplicated()方法,這里有如下兩點要進行強調(diào):(1)只有數(shù)據(jù)表中兩個條目間所有列的內(nèi)容都相等時,duplicated()方法才會判斷為重復值。(2)duplicated()方法支持從前向后(first)和從后向前(last)兩種重復值查找模式,默認是從前向后查找判斷重復值的。換句話說,就是將后出現(xiàn)的相同條目判斷為重復值。11.1.3重復值的處理drop_duplicates()方法的語法格式如下:上述方法中,inplace參數(shù)接收一個布爾類型的值,表示是否替換原來的數(shù)據(jù),默認為False。drop_duplicates(subset=None,keep='first',inplace=False)11.1.3重復值的處理異常值是指樣本中的個別值,其數(shù)值明顯偏離它所屬樣本的其余觀測值,這些數(shù)值是不合理的或錯誤的。11.1.4異常值的處理要想確認一組數(shù)據(jù)中是否有異常值,則常用的檢測方法有3σ原則(拉依達準則)和箱形圖。3σ原則是基于正態(tài)分布的數(shù)據(jù)檢測,而箱形圖沒有什么嚴格的要求,可以檢測任意一組數(shù)據(jù)11.1.4異常值的處理思考:什么是3σ原則?11.1.4異常值的處理3σ原則,又稱為拉依達原則,它是指假設一組檢測數(shù)據(jù)只含有隨機誤差,對其進行計算處理得到標準偏差,按一定概率確定一個區(qū)間,凡是超過這個區(qū)間的誤差都是粗大誤差,在此誤差的范圍內(nèi)的數(shù)據(jù)應予以剔除。11.1.4異常值的處理
11.1.4異常值的處理正態(tài)分布函數(shù)如下圖所示。根據(jù)正態(tài)分布函數(shù)圖可知,3σ原則在各個區(qū)間所占的概率如下所示:(1)數(shù)值分布在(μ-σ,μ+σ)中的概率為0.682。(2)數(shù)值分布在(μ-2σ,μ+2σ)中的概率為0.954。(3)數(shù)值分布在(μ-3σ,μ+3σ)中的概率為0.997。11.1.4異常值的處理數(shù)值幾乎全部集中在(μ-3σ,μ+3σ)]區(qū)間內(nèi),超出這個范圍的可能性僅占不到0.3%。所以,凡是誤差超過這個區(qū)間的就屬于異常值,應予以剔除。11.1.4異常值的處理箱形圖是一種用作顯示一組數(shù)據(jù)分散情況的統(tǒng)計圖。在箱形圖中,異常值通常被定義為小于QL–1.5QR或大于QU+1.5IQR的值。(1)QL稱為下四分位數(shù),表示全部觀察中四分之一的數(shù)據(jù)取值比它?。唬?)QU稱為上四分位數(shù),表示全部觀察值中有四分之一的數(shù)據(jù)取值比它大;(3)IQR稱為四分位數(shù)間距,是上四分位數(shù)QU與下四分位數(shù)QL之差,其間包含了全部觀察值的一半。11.1.4異常值的處理離散點表示的是異常值,上界表示除異常值以外數(shù)據(jù)中最大值;下界表示除異常值以外數(shù)據(jù)中最小值。11.1.4異常值的處理為了能夠從箱形圖中查看異常值,Pandas中提供了一個boxplot()方法,專門用來繪制箱形圖。從輸出的箱形圖中可以看出,D列的數(shù)據(jù)中有一個離散點,說明箱形圖成功檢測出了異常值。11.1.4異常值的處理檢測出異常值后,通常會采用如下四種方式處理這些異常值:直接將含有異常值的記錄刪除。用具體的值來進行替換,可用前后兩個觀測值的平均值修正該異常值。不處理,直接在具有異常值的數(shù)據(jù)集上進行統(tǒng)計分析。視為缺失值,利用缺失值的處理方法修正該異常值。11.1.4異常值的處理如果希望對異常值進行修改,則可以使用replace()方法進行替換,該方法不僅可以對單個數(shù)據(jù)進行替換,也可以多個數(shù)據(jù)執(zhí)行批量替換操作。to_replace:表示查找被替換值的方式。value:用來替換任何匹配to_replace的值,默認值None。replace(to_replace=None,value=None,inplace=False,limit=None,regex=False,method='pad')11.1.4異常值的處理11.1.4異常值的處理在處理數(shù)據(jù)時,可能會遇到數(shù)據(jù)類型不一致的問題。例如,通過爬蟲采集到的數(shù)據(jù)都是整型的數(shù)據(jù),在使用數(shù)據(jù)時希望保留兩位小數(shù)點,這時就需要將數(shù)據(jù)的類型轉(zhuǎn)換成浮點型。創(chuàng)建Pandas數(shù)據(jù)對象時,如果沒有明確地指出數(shù)據(jù)的類型,則可以根據(jù)傳入的數(shù)據(jù)推斷出來,并且通過dtypes屬性進行查看。df=pd.DataFrame({'A':['5','6','7'],'B':['3','2','1']})#查看數(shù)據(jù)的類型df.dtypesAobjectBobjectdtype:object11.1.5更改數(shù)據(jù)類型還可以在創(chuàng)建Pandas對象時明確地指定數(shù)據(jù)的類型,即在使用構(gòu)造方法中的dtype參數(shù)指定數(shù)據(jù)的類型。df=pd.DataFrame({'A':['5','6','7'],
'B':['3','2','1']},dtype='int')df.dtypesAint32Bint32dtype:object11.1.5更改數(shù)據(jù)類型通過astype()方法可以強制轉(zhuǎn)換數(shù)據(jù)的類型。dtype:表示數(shù)據(jù)的類型。errors:錯誤采取的處理方式,可以取值為raise或ignore。其中,raise表示允許引發(fā)異常,ignore表示抑制異常,默認為raise。astype(dtype,copy=True,errors='raise',**kwargs)11.1.5更改數(shù)據(jù)類型astype()方法存在著一些局限性,只要待轉(zhuǎn)換的數(shù)據(jù)中存在非數(shù)字以外的字符,在使用astype()方法進行類型轉(zhuǎn)換時就會出現(xiàn)錯誤,而to_numeric()函數(shù)的出現(xiàn)正好解決了這個問題。11.1.5更改數(shù)據(jù)類型to_numeric()函數(shù)可以將傳入的參數(shù)轉(zhuǎn)換為數(shù)值類型。arg:表示要轉(zhuǎn)換的數(shù)據(jù),可以是list、tuple、Series。errors:表示錯誤采取的處理方式。pandas.to_numeric(arg,errors='raise',downcast=None)11.1.5更改數(shù)據(jù)類型
第二部分PART0211.2數(shù)據(jù)合并concat()函數(shù)可以沿著一條軸將多個對象進行堆疊,其使用方式類似數(shù)據(jù)庫中的數(shù)據(jù)表合并。concat(objs,axis=0,join=‘outer’,join_axes=None,ignore_index=False,keys=None,levels=None,names=None,
...)11.2.1軸向堆疊數(shù)據(jù)axis:表示連接的軸向,可以為0或1,默認為0。join:表示連接的方式,inner表示內(nèi)連接,outer表示外連接,默認使用外連接。ignore_index:如果設置為True,清除現(xiàn)有索引并重置索引值。names:結(jié)果分層索引中的層級的名稱。根據(jù)軸方向的不同,可以將堆疊分成橫向堆疊與縱向堆疊,默認采用的是縱向堆疊方式。AB橫向AB縱向11.2.1軸向堆疊數(shù)據(jù)在堆疊數(shù)據(jù)時,默認采用的是外連接(join參數(shù)設為outer)的方式進行合并,當然也可以通過join=inner設置為內(nèi)連接的方式。11.2.1軸向堆疊數(shù)據(jù)當使用concat()函數(shù)合并時,若是將axis參數(shù)的值設為1,且join參數(shù)的值設為outer,代表著使用橫向堆疊與外連接的方式進行合并。11.2.1軸向堆疊數(shù)據(jù)當使用concat()函數(shù)合并時,若是將axis參數(shù)的值設為0,且join參數(shù)的值設為inner,則代表著使用縱向堆疊與內(nèi)連接的方式進行合并。11.2.1軸向堆疊數(shù)據(jù)主鍵合并類似于關(guān)系型數(shù)據(jù)庫的連接方式,它是指根據(jù)一個或多個鍵將不同的DatFrame對象連接起來,大多數(shù)是將兩個DatFrame對象中重疊的列作為合并的鍵。11.2.2主鍵合并數(shù)據(jù)Pandas中提供了用于主鍵合并的merge()函數(shù)。left:參與合并的左側(cè)DataFrame對象。right:參與合并的右側(cè)DataFrame對象。how:表示連接方式,默認為inner。pandas.merge(left,right,how='inner',on=None,left_on=None,right_on=None,left_index=False,right_index=False,sort=False,suffixes=('_x','_y'),copy=True,indicator=False,validate=None)11.2.2主鍵合并數(shù)據(jù)how參數(shù)可以取下列值:left:使用左側(cè)的DataFrame的鍵,類似SQL的左外連接。right:使用右側(cè)的DataFrame的鍵,類似SQL的右外連接。outer:使用兩個DataFrame所有的鍵,類似SQL的全連接。inner:使用兩個DataFrame鍵的交集,類似SQL的內(nèi)連接。11.2.2主鍵合并數(shù)據(jù)在使用merge()函數(shù)進行合并時,默認會使用重疊的列索引做為合并鍵,并采用內(nèi)連接方式合并數(shù)據(jù),即取行索引重疊的部分。11.2.2主鍵合并數(shù)據(jù)除此之外,merge()函數(shù)還支持對含有多個重疊列的DataFrame對象進行合并。11.2.2主鍵合并數(shù)據(jù)使用外連接的方式將left與right進行合并時,列中相同的數(shù)據(jù)會重疊,沒有數(shù)據(jù)的位置使用NaN進行填充。11.2.2主鍵合并數(shù)據(jù)左連接是以左表為基準進行連接,所以left表中的數(shù)據(jù)會全部顯示,right表中只會顯示與重疊數(shù)據(jù)行索引值相同的數(shù)據(jù),合并后表中缺失的數(shù)據(jù)會使用NaN進行填充。11.2.2主鍵合并數(shù)據(jù)右連接與左連接的規(guī)則正好相反,右連接是以右表為基準,右表中的數(shù)據(jù)全部顯示,而左表中顯示與重疊數(shù)據(jù)行索引值相同的數(shù)據(jù),合并后缺失的數(shù)據(jù)使用NaN填充合并。11.2.2主鍵合并數(shù)據(jù)假設兩張表中的行索引與列索引均沒有重疊的部分,但依舊可以使用merge函數(shù)來合并,只需要將參數(shù)left_index與right_index的值設置為True即可。11.2.2主鍵合并數(shù)據(jù)join()方法能夠通過索引或指定列來連接多個DataFrame對象。on:名稱,用于連接列名。how:可以從{''left'',''right'',''outer'',''inner''}中任選一個,默認使用左連接的方式。sort:根據(jù)連接鍵對合并的數(shù)據(jù)進行排序,默認為False。join(other,on=None,how='left',lsuffix='',rsuffix='',sort=False)11.2.3根據(jù)行索引合并數(shù)據(jù)更改數(shù)據(jù)類型當DataFrame對象中出現(xiàn)了缺失數(shù)據(jù),而我們希望使用其他DataFrame對象中的數(shù)據(jù)填充缺失數(shù)據(jù),則可以通過combine_first()方法為缺失數(shù)據(jù)填充。combine_first(other)上述方法中只有一個參數(shù)other,該參數(shù)用于接收填充缺失值的DataFrame對象。11.2.4合并重疊數(shù)據(jù)假設現(xiàn)在有l(wèi)eft表與right表,其中l(wèi)eft表中存在3個缺失的數(shù)據(jù),而right表中的數(shù)據(jù)是完整的,并且right表與left表有相同的索引名,此時我們可以使用right表中的數(shù)據(jù)來填充left表的缺失數(shù)據(jù),得到一個新的result表,11.2.4合并重疊數(shù)據(jù)
第三部分PART0311.3數(shù)據(jù)重塑Pandas中重塑層次化索引的操作主要是stack()方法和unstack()方法,前者是將數(shù)據(jù)的列“旋轉(zhuǎn)”為行,后者是將數(shù)據(jù)的行“旋轉(zhuǎn)”為列。11.3.1重塑層次化索引stack()方法可以將數(shù)據(jù)的列索引轉(zhuǎn)換為行索引。level:表示操作內(nèi)層索引。若設為0,表示操作外層索引,默認為-1。dropna:表示是否將旋轉(zhuǎn)后的缺失值刪除,若設為True,則表示自動過濾缺失值,設置為False則相反。DataFrame.stack(level=-1,dropna=True)11.3.1重塑層次化索引現(xiàn)在有一個DataFrame類對象df,如果希望將它重塑為一個具有兩層索引結(jié)構(gòu)的對象result,也就是說將列索引轉(zhuǎn)換成內(nèi)層行索引,則重塑前后的效果如下圖所示。11.3.1重塑層次化索引unstack()方法可以將數(shù)據(jù)的行索引轉(zhuǎn)換為列索引。level:默認為-1,表示操作內(nèi)層索引,0表示操作外層索引。fill_value:若產(chǎn)生了缺失值,則可以設置這個參數(shù)用來替換NaN。DataFrame.unstack(level=-1,fill_value=None)11.3.1重塑層次化索引某件商品的價格在非活動期間為50元,而在活動期間商品的價格為30元,這就造成同一件商品在不同時間對應不同的價格。同一款商品的在活動前后的價格無法很直觀地看出來。11.3.2軸向旋轉(zhuǎn)我們可以將商品的名稱作為列索引,出售日期作為行索引,價格作為表格中的數(shù)據(jù),此時每一行展示了同一日期不同手機品牌的價格。通過表格可以直觀地看出活動前后的價格浮動11.3.2軸向旋轉(zhuǎn)在Pandas中pivot()方法提供了這樣的功能,它會根據(jù)給定的行或列索引重新組織一個DataFrame對象。index:用于創(chuàng)建新DataFrame對象的行索引。columns:用于創(chuàng)建新DataFrame對象的列索引。values:用于填充新DataFrame對象中的值。pivot(index=None,columns=None,values=None)11.3.2軸向旋轉(zhuǎn)
第四部分PART0411.4數(shù)據(jù)轉(zhuǎn)換Pandas中提供了一個rename()方法來重命名個別列索引或行索引的標簽或名稱。index,columns:表示對行索引名或列索引名的轉(zhuǎn)換。inplace:默認為False,表示是否返回新的Pandas對象。rename(mapper=None,index=Nonecolumns=None,axis=None,copy=True,inplace=False,level=None)11.4.1重命名軸索引例如,將df對象的每個列索引名稱重命名為a、b、c。11.4.1重命名軸索引有時候我們會碰到這樣的需求,例如,將有關(guān)年齡的數(shù)據(jù)進行離散化(分桶)或拆分為“面元”,直白來說,就是將年齡分成幾個區(qū)間。11.4.2離散化連續(xù)數(shù)據(jù)Pandas的
cut
()函數(shù)能夠?qū)崿F(xiàn)離散化操作。x:表示要分箱的數(shù)組,必須是一維的。bins:接收int和序列類型的數(shù)據(jù)。right:是否包含右端點,決定區(qū)間的開閉,默認為True。pandas.cut(x,bin
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 展覽場地租賃合同
- 租賃小區(qū)場地合同
- 停薪留職合同協(xié)議
- 美術(shù)作品展覽權(quán)責免除合同
- 股份制企業(yè)合同簽署流程規(guī)范
- 環(huán)境咨詢服務合同
- 淘寶店裝修服務合同
- 養(yǎng)老服務合同發(fā)布
- 建筑工程質(zhì)量保證和監(jiān)理服務合同
- 南京師范大學中北學院《現(xiàn)代電力生產(chǎn)技術(shù)》2023-2024學年第二學期期末試卷
- 小學科學冀人版六年級下冊全冊同步練習含答案
- 郵政儲蓄銀行-客戶經(jīng)理(個人消費貸款)-試題+答案
- 2024年3月10日國考公務員稅務局面試真題及解析
- 旅店會客登記制度
- 市政造價員道路工程預決算入門講解(零起步培訓課件)
- VOC廢氣治理工程中低溫催化氧化技術(shù)的研究與實踐
- 《管理統(tǒng)計學》課件
- 工程力學期末考試試卷A及答案
- 教師的挑戰(zhàn):寧靜的課堂革命
- 新能源材料與器件導論緒論
- 市政工程監(jiān)理實施細則(完整版)
評論
0/150
提交評論