




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第六章使用pandas進行數(shù)據(jù)清洗和整理
任務6.1數(shù)據(jù)清洗數(shù)據(jù)清洗概述缺失值檢測與處理重復值檢測與處理異常值檢測與處理數(shù)據(jù)清洗概述數(shù)據(jù)分析結果的好壞依賴于數(shù)據(jù)的好壞。很多數(shù)據(jù)集存在數(shù)據(jù)缺失,或數(shù)據(jù)格式不統(tǒng)一(畸形數(shù)據(jù)),或錯誤數(shù)據(jù)的情況。在處理任何數(shù)據(jù)之前,我們的第一任務是理解數(shù)據(jù)以及數(shù)據(jù)是干什么用的。我們嘗試去理解數(shù)據(jù)的列/行、記錄、數(shù)據(jù)格式、語義錯誤、缺失的條目以及錯誤的格式,這樣我們就可以大概了解數(shù)據(jù)分析之前要做哪些“清理”工作。數(shù)據(jù)清洗階段的主要任務就是處理缺失值、處理重復值、刪除離群點和解決屬性的不一致性等。缺失值檢測與處理缺失值檢測isnull()和notnull()函數(shù)可以判斷數(shù)據(jù)集中是否存在空值和缺失值。案例df.isnull().sum()#統(tǒng)計各列有多少缺失值df.isnull().sum().sum()#整個dataframe有多少缺失值df.isnull().any()#各個列是否存在缺失值df.isnull().values.any()#整個dataframe是否存在缺失值df['A'].isnull()#檢查缺失值df['A'].notnull()#檢查非缺失值df['A'].isnull().values.any()#指定列是否存在缺失值df['A'].isnull().sum()#指定列有多少缺失值缺失值檢測與處理缺失值處理刪除存在缺失值的:dropna(axis=0)默認(axis=0)是逢空值剔除整行,設置關鍵字參數(shù)axis=1表示逢空值去掉整列不會修改原數(shù)據(jù),需要接受返回值。案例:df.dropna()#舍棄含有任意缺失值的行df.dropna(axis=1)#舍棄含有任意缺失值的列df.dropna(how='all')#how='any'如果一行(或一列)里任何一個數(shù)據(jù)有任何出現(xiàn)Nan就去掉整行,'all’一行(或列)每一個數(shù)據(jù)都是Nan才去掉這整行df.dropna(thresh=2)#舍棄超過兩欄缺失值的行缺失值檢測與處理替換缺失值:fillna(value,inplace=True)value:替換成的值inplace:True:會修改原數(shù)據(jù),F(xiàn)alse:不替換修改原數(shù)據(jù),生成新的對象案例:df.fillna(0)#用0填補df['age'].fillna(df['age'].mean())#用平均值填補缺失值df['age'].fillna(df.groupby('gender')['age'].transform('mean'),inplace=True)#根據(jù)各性別平均年齡填補缺失值df.fillna(method='pad')#用前向后填補缺失值(pad或者ffill)df.fillna(method='bfill',limit=2)#用后向前填補缺失值(bfill或者backfill)缺失值檢測與處理插值法填補缺失值:interpolate()Series和DataFrame對象都有interpolate()方法,默認情況下,該函數(shù)在缺失值處執(zhí)行線性插值。這個方法是利用數(shù)學方法來估計缺失點的值,對于較大的數(shù)據(jù)非常有用。插值就是在已知數(shù)據(jù)之間計算估計值的過程,是一種實用的數(shù)值方法,是函數(shù)逼近的重要方法。在信號處理和圖形分析中,插值運算的應用較為廣泛。重復值檢測與處理重復值檢測duplicated():用于標記Pandas對象的數(shù)據(jù)是否重復,重復則標記為True,不重復則標記為False,該方法返回一個由布爾值組成的Series對象,它的行索引保持不變,數(shù)據(jù)則變?yōu)闃擞浀牟紶栔?。所有列作為依?jù)進行查找的,每一列的值都必須一致才會被標記為重復值。案例df[df.duplicated()]#篩選出重復行df[df.duplicated()==False]#篩選出非重復行重復值檢測與處理重復值處理刪除重復值案例df.drop_duplicates()#刪除重復值df.drop_duplicates(['sex','year'],keep='last')#keep='last'參數(shù)就是讓系統(tǒng)從后向前開始篩查,這樣索引小的重復行會返回'True‘替換值案例df.replace('','不詳')
異常值檢測與處理異常值:是指樣本中的個別值,其數(shù)值明顯偏離它所屬樣本的其余觀測值,這些數(shù)值是不合理的或錯誤的。要想確認一組數(shù)據(jù)中是否有異常值,則常用的檢測方法:3σ原則(拉依達準則)箱形圖3σ原則(拉依達準則)
根據(jù)正態(tài)分布函數(shù)圖可知,3σ原則在各個區(qū)間所占的概率如下所示:(1)數(shù)值分布在(μ-σ,μ+σ)中的概率為0.682。(2)數(shù)值分布在(μ-2σ,μ+2σ)中的概率為0.954。(3)數(shù)值分布在(μ-3σ,μ+3σ)中的概率為0.997。σ=np.sqrt((np.square((x-x.mean()))).mean())箱形圖箱形圖是一種用作顯示一組數(shù)據(jù)分散情況的統(tǒng)計圖,離散點表示的是異常值。小結數(shù)據(jù)清洗概述缺失值檢測與處理重復值檢測與處理異常值檢測與處理第六章使用pandas進行數(shù)據(jù)清洗和整理
任務6.2數(shù)據(jù)合并和連接concat合并append合并merge連接join連接combine_first和combine填充合并concat合并使用某種合并方式(inner/outer)沿著某個軸向(axis=0/1)將多個對象進行堆疊把多個Pandas對象(DataFrame/Series)合并成一個concat合并pandas.concat(objs,axis=0,join='outer',‘join_axes=None’,ignore_index=False,‘keys=None’)objs:一個列表,要進行拼接的pandas對象,可以是DataFrame或者Series,可以混合axis:指定對象按照那個軸進行拼接,默認為0(縱向拼接),1為橫向拼接join:拼接的方式,inner為交集,outer為并集join_axes:index的列表,僅在橫向合并時使用,指明要將數(shù)據(jù)合并入哪個原表的indexignore_index:如果設置為true,則無視表原來的軸標簽,合并后生成新的軸標簽keys:表標識的列表,用來區(qū)分合并的表來自哪里concat合并-按行pd.concat(frames):默認參數(shù)的concat,按行合并,參數(shù)為axis=0、join=outer、ignore_index=Falseconcat合并-按行pd.concat(frames,keys=['x','y','z'])使用keys標識表concat合并-按列pd.concat([df1,df4],axis=1)按列合并,axis=1pd.concat([df1,df4],axis=1,join='inner')#按行索引相同合并列append合并append語法:DataFrame.append(other,ignore_index=False)append只有按行合并,沒有按列合并,相當于concat按行的簡寫形式other:單個dataframe、series、dict,或者列表ignore_index:是否忽略掉原來的數(shù)據(jù)索引merge連接Pandas的Merge,相當于Sql的Join,將不同的表按key關聯(lián)到一個表。merge的語法:pd.merge(left,right,how='inner',on=None,left_on=None,right_on=None,left_index=False,right_index=False,sort=True,suffixes=('x','y'),copy=True,indicator=False,validate=None)left,right:要連接的dataframe或者Serieshow:join類型,'left','right','outer','inner'on:join的key,left和right都需要有這個keyleft_on:left的df或者series的keyright_on:right的df或者seires的keyleft_index,right_index:使用index而不是普通的column做joinsuffixes:兩個元素的后綴,如果列有重名,自動添加后綴,默認是('x','y')
merge連接pd.merge(left,right,on='key')默認等值連接,左邊和右邊的key都有,才會出現(xiàn)在結果里merge連接pd.merge(left,right,on=['key1','key2'])#多個關鍵字等值連接,默認how=‘inner’merge連接pd.merge(left,right,how='left',on=['key1','key2'])#左邊的都會出現(xiàn)在結果里,右邊的如果無法匹配則為Nullmerge連接pd.merge(left,right,how='right',on=['key1','key2'])右邊的都會出現(xiàn)在結果里,左邊的如果無法匹配則為Nullmerge連接pd.merge(left,right,how='outer',on=['key1','key2'])#左邊、右邊的都會出現(xiàn)在結果里,如果無法匹配則為Nulljoin連接默認行索引匹配連接,
merge()默認是列索引匹配連接。用法:join()方法能夠通過索引或指定列來連接多個DataFrame對象,它默認以index作為對齊的列。join()和merge()一樣,是橫向拼接,只能進行數(shù)據(jù)匹配,即添加列,不能添加行,并且支持how的四種模式:inner,left,right,outer。其實join()就是merge()的一種封裝,后臺調(diào)用的正是merge()。只是為了調(diào)用更為簡單,才有了join()。語法:join(other,on=None,how='left',lsuffix='',rsuffix='',sort=False)
how:和merge中的how參數(shù)一樣,用來指定表合并保留數(shù)據(jù)的規(guī)則,匹配到的內(nèi)容不存在,則用NaN填充。
on:在實際應用中如果右表的索引值正是左表的某一列的值,這時可以通過將右表的索引和左表的列對齊合并這樣靈活的方式進行合并。
sort:根據(jù)連接鍵對合并的數(shù)據(jù)進行排序,默認為False。理解leftjoin、rightjoin、innerjoin、outerjoin的區(qū)別join連接Joiningonindex(默認是基于索引連接的)常先設置兩表的index列。left.join(right,how='inner')#等價pd.merge(left,right,left_index=True,right_index=True,how='inner')join連接Joiningleftkeycolumnsonanrightindex(左邊列與右邊索引連接)left.join(right,on='key')#left的key列和right的行索引連接,key必須是左邊列#等價pd.merge(left,right,left_on='key',right_index=True,how='left',sort=False)join連接如何實現(xiàn)兩個df的列連接呢?兩種方法列連接,需要把兩個df列轉(zhuǎn)換成行索引df.set_index('key').join(other.set_index('key'))列連接,需要把other的列轉(zhuǎn)換成行索引,key必須是df的列df.join(other.set_index('key'),on='key',how='inner')combine_firstbine_first(df2)填充空值規(guī)則是與null值的元素在同一位置等,同一位置指行列索引值一致。通過在df1中使用df2的非null值填充空值來組合兩個DataFrame對象,函數(shù)返回的DataFrame的行索引和列索引將是兩者的并集。如果df1中數(shù)據(jù)非空,則結果保留df1中的數(shù)據(jù),如果df1中的數(shù)據(jù)為空值且傳入combine_first()方法的df2中數(shù)據(jù)非空,則結果取df2中的數(shù)據(jù),如果df1和df2中的數(shù)據(jù)都為空值,則結果保留df1中的空值。combine_firstcombine填充合并bine(df2,func,fill_value,
overwrite=True):df1基于傳遞的函數(shù)執(zhí)行與df2的逐列組合。使用func將df1與df2組合到按元素組合的列。生成的DataFrame的行索引和列索引將是兩者的并集。func函數(shù)的入?yún)⑹莾蓚€Series,分別來自兩個DataFrame(將DataFrame按列遍歷),返回結果是一個合并之后的Series,在函數(shù)中實現(xiàn)合并的規(guī)則。combine填充合并fill_value:在將列傳遞給合并函數(shù)之前,先用fill_value填充df1、df2中所有列的值,再按傳入的函數(shù)進行合并操作。overwrite=False,不處理缺少的列,缺少指df1中有而df2中沒有該列,df1中A列原樣返回小結df1.concat(df2):機械地行或列堆疊數(shù)據(jù)。df1.append(df2):只有按行合并,沒有按列合并,相當于concat按行的簡寫形式。df1.merge(df2):適合處理列的連接。df1.join(df2):適合處理行索引的連接。df.set_index()、df.reset_index()、df.T可以進行df行列的轉(zhuǎn)換,因此merge和join方法其實用一種就可以了。bine_first(df2):df2填充df1空值,規(guī)則是與null值的元素在同一位置,函數(shù)返回的df的行索引和列索引將是兩者的并集。bine(df2):可以自定義合并的規(guī)則。當需要合并兩個相似的數(shù)據(jù)集,且兩個數(shù)據(jù)集里的數(shù)據(jù)各有一部分是目標數(shù)據(jù)時,很適合使用該方法。例如df1中的數(shù)據(jù)比df2中的數(shù)據(jù)多,但df1中的部分數(shù)據(jù)質(zhì)量不如df2中的高,就可以使用該方法。第六章使用pandas進行數(shù)據(jù)清洗和整理
任務6.3數(shù)據(jù)重塑數(shù)據(jù)重塑pivotpivot_tablestack、unstack數(shù)據(jù)重塑數(shù)據(jù)重塑:將列式數(shù)據(jù)變成二維交叉形式,便于分析,叫做數(shù)據(jù)重塑或數(shù)據(jù)透視。數(shù)據(jù)重塑理解:數(shù)據(jù)的重塑簡單說就是對原數(shù)據(jù)進行變形。對數(shù)據(jù)的重塑不是僅改變形狀那么簡單,在變形過程中,數(shù)據(jù)的內(nèi)在數(shù)據(jù)意義不能變化,但數(shù)據(jù)的提示邏輯則發(fā)生了重大的改變。pivotPivot:將原始DataFrame重塑,返回一個新的DataFrame。代碼含義:唯一化處理foo列值最為index,以bar列中的值A、B和C來作為列名,展示DataFrame中baz列數(shù)據(jù)。pivot語法:df.pivot(index=None,columns=None,values=None),指定index、columns、values實現(xiàn)二維透視。index:指定一個或多個列的值作為新DataFrame的index,會自動唯一化處理,注意其最終值不可以重復,否則報錯(可選,若不填則使用現(xiàn)有index)columns:指定一個或多個列的值作為新DataFrame的列values:指定一個或多列的值作為新DataFrame的值(可選,若不填則使用所有剩余列,并且結果將具有按層次結構索引的列)pivot_tablepivot_table:用pivot只能對數(shù)據(jù)進行變形整理,有時還需要做聚合分析。pivot_table功能比pivot/groupby函數(shù)更為完善,除了可以處理重復值,關鍵在于引入了多層索引。piovt_table制表完成之后返回的是DataFrame,非常方便下一步使用,比如基于pandas畫圖。類似Excel的高級數(shù)據(jù)透視功能。#字典傳入多列的匯總#aggfun指定匯總的處理方式,默認是求均值#列表傳入多種匯總方式table=pd.pivot_table(df,index=['A','C'],values=['D','E'],aggfunc={'D':np.mean,'E':[np.min,np.max,np.mean]})tablepivot_table畫條形圖barchart:分類匯總可以很好地展示數(shù)據(jù),pivot_table函數(shù)也可以,因其返回的是一個多層索引的DataFrame。table.plot.bar(y=['D','E'],rot=45,figsize=(16,10),fontsize=(20))stack、unstackstack:將dataframe中的列旋轉(zhuǎn)為行,默認將最內(nèi)層(level=-1)列索引旋轉(zhuǎn)變成最內(nèi)層行索引。unstack:將dataframe中行旋轉(zhuǎn)為列,默認將最內(nèi)層(level=-1)的行索引旋轉(zhuǎn)變成最內(nèi)存列索引。stack和unstack默認旋轉(zhuǎn)軸的級別為最低級別(即最內(nèi)層,level=-1)stack、unstackDataFrame.stack(level=-1,dropna=True),將column變成index。level=-1代表多層索引的最內(nèi)層,可以通過level指定哪一層(或列表表達的哪若干層)的列索引旋轉(zhuǎn)成行索引。df2.stack()==df2.stack(0),這里df2的列索引只有一層,所以最內(nèi)層就是level==0df2.stack()==df2.stack(-1)stack、unstackDataFrame.unstack(level=-1,fill_value=None),將index變成columnstacked.unstack()==stacked.unstack(2),stacked的行索引有3層,最內(nèi)層level=2stacked.unstack()==stacked.unstack(-1)stack、unstack請注意,stack和unstack方法隱式地對涉及的索引進行排序。因此,調(diào)用stack然后取消stack,或反之亦然,將生成原始數(shù)據(jù)幀或序列的按索引已排序副本。小結數(shù)據(jù)重塑pivotpivot_tablestack、unstack第六章使用pandas進行數(shù)據(jù)清洗和整理
任務6.4字符串處理str介紹獲取Series.str或Index.str,然后使用各種字符串處理函數(shù)向量化處理數(shù)據(jù)str處理的鏈式操作pandas常見字符串處理函數(shù)使用str的startswith、contains等bool的Series做條件查詢使用正則表達式str介紹str簡介:Series和Index包含一些列的字符操作方法,這可以使我們輕易操作數(shù)組中的各個元素。最重要的是,這些方
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 南京中醫(yī)藥大學翰林學院《中醫(yī)耳鼻喉科學》2023-2024學年第二學期期末試卷
- 泗陽縣2025屆六年級數(shù)學小升初摸底考試含解析
- 山西省高平市重點達標名校2025屆學業(yè)水平考試生物試題模擬試題含解析
- 遼寧省朝陽市2025年三下數(shù)學期末聯(lián)考試題含解析
- 南華大學《固體廢棄物處理與處置》2023-2024學年第二學期期末試卷
- 四川省仁壽縣城北教學點2025年高三第二學期試題含解析
- 2025年幼兒教師技能考試試卷及答案
- 2025年職業(yè)治療師資格考試試題及答案
- 江西省撫州市崇仁重點中學2025屆初三兩校下學期聯(lián)考物理試題含解析
- 泰山職業(yè)技術學院《物理化學實驗H》2023-2024學年第二學期期末試卷
- 《馬克思主義中國化思想通史》導讀-南京林業(yè)大學中國大學mooc課后章節(jié)答案期末考試題庫2023年
- 北京中考語文詞語表
- 水資源利用智慧樹知到答案章節(jié)測試2023年西安理工大學
- 水質(zhì)對干豆腐品質(zhì)的影響機制及調(diào)控技術
- LY/T 2676-2016半干旱地區(qū)灌木林平茬與復壯技術規(guī)范
- 裝配式混凝土結構的構件安裝分項工程(驗收批)質(zhì)量驗收記錄表
- 作業(yè)許可檢查表
- 農(nóng)產(chǎn)品集中交易市場等級技術規(guī)范-編制說明
- 張京16分鐘中英文對照翻譯稿
- 武漢綠地中心項目技術管理策劃書(48頁)
- 油田相關業(yè)務的稅制及稅率
評論
0/150
提交評論