




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Python數據分析基礎與應用模塊模塊5Pandas數據預處理【學習與訓練】5.1Pandas數據清理5.1.1Pandas缺失值處理1.使用函數檢查缺失值Pandas提供了isnull()和notnull()兩個函數檢查缺失值,它們同時適用于Series和DataFrame對象。isnull()函數用來判斷元素是否為空,notnull()函數用來判斷元素是否不為空。isnull()函數的語法格式如下:isnuull(obj)或者obj.isnull()obj表示檢查缺失值的Series對象或者DataFrame對象。如果發現數據中存在缺失值,就將這個位置標記為True,否則就標記為False。notnull()函數的語法格式與isnull()函數類似,如果發現數據中有缺失值時返回False。Pandas還提供了any()函數和all()函數檢測行或者列,any()函數用來檢測行或者列的元素是否包含缺失值,如果行或列中的元素包含缺失值,則返回True,否則返加False。all()函數用來檢測行或者列中所有元素都不包含缺失值,如果行或列中的所有元素都不包含缺失值,則返回True,否則返加False。2.使用fillna()函數填充缺失值Pandas提供了多種方法來清除缺失值,其中fillna()函數可以實現用非空數據“填充”NaN值。使用fillna()函數填充缺失值時,既可以使用標量、字典,也可以使用Series或DataFrame對象。fillna()函數的語法格式如下:fillna(value=None,method=None,axis=None,inplace=False,limit=None,downcast=Nome,**kwargs)其主要函數參數說明如下:?value:用于填充的數值。?method:表示填充方式,默認為None。其取值如下:?pad/ffill:向前填充,即使用缺失值前面的一個非缺失值去填充該缺失值。?backfill/bfill:后向填充,即使用缺失值后面的一個非缺失值填充該缺失值。?None:指定一個值去替換缺失值。?axis:用于修改填充方向,默認值為axis=0,表示按列填充;如果設置為1,則表示按行填充。?inplace:該參數的取值為:True、False,默認值為False。如果該參數設置為True表示不創建副本,直接修改源對象;如果設置為False表示創建一個副本,只修改副本,源對象不變。?limit:用于限制填充個數,表示可以連續填充的最大數量,默認值為None。3.使用函數值替換缺失數據Pandas使用mean()、median()和mode()函數計算列的均值(所有值加起來的平均值)、中位數值(排序后排在中間的數)和眾數(出現頻率最高的數)。然后使用這些函數的返回值替換缺失數據。計算某列數據之和時,處理缺失數據需要注意兩點:(1)數據求和時,將NA值視為0。(2)如果要計算的數據全為NA,那么結果就是NA。在某些情況下,需要使用replace()函數將DataFrame中的通用值替換成特定值,這和使用fillna()函數替換NaN值是類似的。4.使用dropna()函數刪除缺失值(1)刪除至少包含1個缺失值的行(2)刪除至少包含1個缺失值的列(3)刪除所有元素都為缺失值的行(4)保留至少包含3個非空值的行(5)刪除指定列中值為空的行5.1.2Pandas清洗無效數據1.清洗格式錯誤數據數據格式錯誤會使數據分析變得困難,甚至不可能。可以將錯誤格式的數據轉換為相同格式的數據。2.清洗超出范圍的錯誤數據如果年齡數據超過了150,百分制考試成績超過了100分,顯然是錯誤數據,我們可以對錯誤的數據進行替換或移除。5.1.3Pandas重復值檢測與處理1.使用duplicated()函數判斷與標記重復值duplicated()函數用于標記Series中的值、DataFrame中的記錄行是否是重復,有重復則返回True,無重復則返回False。該函數返回一個由布爾值組成的Series對象,該對象的行索引保持不變,數據則變為標記是否為重復值的布爾值。duplicated()函數的語法格式如下:pandas.Series.duplicated(self,keep='first')pandas.DataFrame.duplicated(self,subset=None,keep='first')其函數參數說明如下:(1)subset:用于指定檢測重復的數據范圍,默認為數據集的所有列,可指定特定數據列。指定特定的列后,它僅檢測指定的列是否存在重復項。(2)keep:控制如何標記重復值。它有3個不同的取值:frist、last和False,默認值為“frist”。?keep='frist':表示從前向后查找,標記重復數據第一次出現為False,即除了第一次出現外,其余相同的值標記為重復值。?keep='last':表示從后向前查找,標記重復數據最后一次出現為False,即除了最后一次出現外,其余相同的值標記為重復值。?keep=False:標記所有重復數據為True,即所有相同的都被標記為重復。2.使用drop_duplicates()函數刪除重復值PandaDataFrame對象提供了一個去重函數drop_duplicates(),在識別出重復的數據后可以使用Pandas的drop_duplicate函數將其刪除,該函數的語法格式如下:pandas.DataFrame.drop_duplicates(subset=None,keep='first',inplace=False)或pandas.Series.drop_duplicates(keep='first',inplace=False)該函數參數說明如下:?subset:指定要去重的列名,默認為None。?keep:有3個可選參數,分別是first、last、False,默認為first,表示只保留第1次出現的重復項,刪除其余重復項,last表示只保留最后一次出現的重復項,False則表示刪除所有重復項。?inplace:為布爾值參數,默認值False表示刪除重復項后返回一個副本,若設置為Ture則表示直接在原數據上刪除重復項。5.1.4Pandas異常值檢測與處理1.基于3σ原則檢測異常值基于3σ原則檢測異常值具體步驟如下:(1)需要保證數據列大致上服從正態分布;(2)計算需要檢驗的數據列的平均值和標準差;(3)比較數據列的每個值與平均值的偏差是否超過3倍,如果超過3倍,則為異常值;(4)剔除異常值,得到規范的數據。2.認知箱形圖(1)箱形圖的基本組成與特征數據節點箱形圖(Box-plot)又稱為盒須圖、盒式圖或箱線圖,是一種用作顯示一組數據分散情況的統計圖。(2)熟知箱形圖的作用①識別數據的異常值②易于發現數據的偏態和尾重③能用于數據探索性分析,分析數據的形狀掃描二維碼,瀏覽箱形圖作用的具體介紹。Pandas提供了一個專門用來繪制箱型圖的boxplot()方法。3.基于箱形圖檢測與處理異常值從集合角度來看,異常值即離群點。因此,為了處理異常值,首先是判別數據集中是否存在離群點,哪些是異常值,然后再根據實際情況選擇如何處理異常值。檢測出異常值后,通常會采用如下方式處理這些異常值:?直接將含有異常值的記錄刪除?用具體的值來進行替換,可用前后兩個觀測值的平均值修正該異常值?將異常值視為缺失值,按照缺失值的處理方法修正該異常值?對異常值不處理,直接在具有異常值的數據集上進行統計分析異常數據被檢測出來之后,需要進一步確認他們是否為真正的異常值,等確認完以后再決定選用哪種方法進行解決。如果希望對異常值進行修改,則可以使用Pandas中replace()函數進行替換,該方法不僅可以對單個數據進行替換,也可以多個數據執行批量替換操作。replace()函數的語法格式如下:replace(to_replace=None,value=None,inplace=False,limit=None,regex=False,method=‘pad’)其部分函數參數說明如下:?to_replace:表示查找被替換值的方式。?value:用來替換任何匹配to_replace的值,默認值為None。?limit:表示前向或后向填充數據的最大范圍。?regex:表示是否將to_replace和value解釋為正則表達式,接收布爾值或與to_replace相同的類型,默認值為False。?method:表示替換時使用的方法,pad/ffill表示前向填充,bfill表示后向填充。3.處理異常值代碼如下:df.replace(to_replace=30,value=3)5.1.5Pandas刪除數據集中指定行或列的數據1.使用dropna()函數刪除缺失值如果想刪除缺失值,使用dropna()函數結合參數axis就可以實現。在默認情況下,按照axis=0來按行處理,這意味著如果某一行中存在NaN值將會刪除整行數據。dropna()函數的語法格式如下:DataFrame.dropna(axis=0,how='any',thresh=None,subset=None,inplace=False)該函數參數說明如下:?axis:確定刪除的行或列,默認值為0,如果設置參數axis為0或者index,則表示刪除包含缺失值的整行;如果設置參數axis為1或者columns,則表示刪除包含缺失值的整列。?how:確定刪除行或列的標準,默認值為'any',如果一行或一列里任何一個數據有出現NaN就刪除整行或整列;如果設置how='all',則一行或一列數據全為NaN才刪除整行或整列。?thresh:類型為int,表示有效數據數量的最小要求,設置需要多少非空值的數據才可以保留下來的,例如,如果設置為thresh=2,則表示該行或該列至少有兩個非NaN值時才將其予以保留。?subset:設置想要處理缺失值的列。如果是多個列,可以使用列名的list作為參數。?inplace:該參數為bool類型,表示是否修改源文件。如果設置為True,則表示直接修改源數據;如果設置為False,則表示返回數據集的副本,針對原數據的副本進行修改。2.使用drop()函數刪除指定行或列的數據使用drop()函數可以刪除指定行或列的數據,該數的語法格式如下:drop(labels,axis=0,level=None,inplace=False,errors='raise')該函數參數說明如下:?labels:接收字符串或數組,代表刪除的行或列的標簽,無默認值。?axis:axis設置為0時表示刪除行數據,axis設置為1時表示刪除列數據。?level:接收整型數據或索引名,代表標簽所在級別,默認為None。?inplace:默認值為False,表示操作對原數據不生效。如果要對原數據生效,則將inplace設置為True。?errors:errors='raise'會讓程序在labels接收到不存在的行名或者列名時拋出錯誤導致程序停止運行,errors='ignore'會忽略沒有的行名或者列名,只對存在的行名或者列名進行操作,該參數的默認值為errors='raise'。5.2Pandas數據合并5.2.1使用merge()函數通過主鍵合并數據在Pandas中,通過兩個數據集中一個或多個鍵來合并數據時,可以使用merge()函數實現。merge()函數根據一個或多個鍵將不同的DataFrame對象連接起來,大多數情況是將兩個DataFrame對象中重疊的列作為合并的鍵,其語法格式如下: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)使用merge()函數進行合并時,默認會使用重疊的列索引作為合并鍵,并采用內連接方式合并數據,即只取行索引重疊的數據。5.2.2使用join()函數通過索引或指定列合并數據join()函數的語法格式如下:join(other,how='left',on=None,lsuffix='',rsuffix='',sort=True)該函數參數說明如下所示:?how:表示連接方式,其取值為:{left,inner,outer,right},默認使用left的連接方式。?on:表示連接列名。?lsuffix:接收字符串,用于在左側重疊的列名后添加后綴名。?rsuffix:接收字符串,用于在右側重疊的列名后添加后綴名。?sort:默認值為False,根據連接鍵對合并的數據進行排序。1.join()函數使用默認方式合并數據join()函數默認使用左連接方式,即以左數據集為基準,使用join()函數進行合并后,左數據集的數據會全部展示。如果兩個數據集中沒有重疊的索引,當使用左連接合并時,右數據集中的數據將不會展示出來。對于merge()函數,如果兩個數據集中沒有重疊的索引,可以設置merge()函數的left_index和right_index參數,對于join()函數則只需要將對象名稱作為參數傳入即可。2.join()函數使用外連接方式合并數據為了將右數據集中的數據展示出來,可以使用how參數將連接方式設置為外連接方式,合并后缺失的數據使用NaN填充。3.join()函數使用參數on指定重疊的列名合并數據如果兩個數據集中行索引和列名重疊,使用join()函數進行合并時,使用參數on指定的重疊的列名即可。5.2.3使用concat()函數沿軸連接數據1.使用concat()函數在DataFrame縱向執行連接操作創建兩個DataFrame對象,并對其進行連接。(1)縱向外連接操作concat()函數的axis參數取默認值0,即縱向連接,連接后的結果數據集的行數為兩個被連接數據集的行數之和;join參數取默認值outer,即外連接。(2)縱向內連接操作concat()函數的axis參數取默認值0,即縱向連接,join參數設置為inner,即內連接。2.使用concat()函數沿著橫向連接DataFrame對象(1)橫向外連接操作concat()函數的axis參數設置為1,即橫向連接,join參數設置為outer,即外連接。連接后的結果數據集的列數為兩個被連接數據集的列數之和。(2)橫向內連接操作concat()函數的axis參數設置為1,即橫向連接,join參數設置為inner,即內連接。3.在concat()函數中使用keys參數給連接一個指定的鍵在concat()函數中使用keys參數給連接一個指定的鍵,行索引index會存在重復使用的現象。如果想讓輸出的行索引遵循依次遞增的規則,那么需要將ignore_index設置為True。5.2.4使用append()函數縱向連接DataFrame對象append()函數是concat()函數的簡略形式,但是append()函數只能在axis=0方向(縱向)上進行數據連接。append()函數的語法格式如下:left.append(right)或left.append(right,ignore_index=True)該函數的功能為:將left指定數據集與right指定數據集進行縱向合并。其中,DataFrame與Series進行合并時,需要使用參數ignore_index=True。5.2.5使用combine_first()函數合并重疊數據combine_first()函數的語法格式如下。bine_first(other)其中,obj1為函數調用對象的數據集;other為函數參數對象的數據集,該參數用于接收填充缺失值的DataFrame對象。5.3Pandas數據抽取5.3.1字段抽取字段抽取是根據已知列數據的開始和結束位置,抽取出新的數據。字段抽取采用slice()函數,該函數的語法格式如下:Series.str.slice(start=None,stop=None)函數參數說明如下:?start:表示字段抽取的開始位置。?stop:表示字段抽取的結束位置。5.3.2字段拆分字段拆分是指按照約定規則拆分已有的字符串,字符分割函數有正序分割列split()函數和逆序分割列rsplit()函數。split()函數的語法格式如下:Series.str.split(sep=None,n=-1,expand=False)該函數參數說明如下:?sep:表示字符串中分隔字符的分隔符,默認分隔符為空格。?n:接收整數,默認值為-1,表示分割的列數。?expand:接收布爾值,默認值為False,表示返回序列(Series)或者索引(Index);如果值設置為True,則返回DataFrame對象或復雜索引(MultiIndex)。5.3.3數據記錄抽取數據記錄抽取是指根據一定的條件,對數據記錄進行抽取。記錄抽取函數的語法格式如下:datafram[condition]函數返回值是DataFram。函數參數condition為過濾條件,常用條件類型如下:①比較運算:大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、不等于(!=)。②范圍運算:between(left,right)。③空值匹配:pandas.isnull(column)。④字符匹配:str.contains(patten,na=False),其中na參數是指空值的處理方式,如果值設置為False,則不匹配空值。⑤邏輯運算:與(&),或(|),取反(not)。5.3.4日期轉換與日期抽取Pandas處理日期和時間數據的方式有多種,其中日期轉換、日期格式化和日期抽取是常見的3項功能。1.日期轉換日期轉換是指將字符型的日期格式的數據轉換成為日期型數據。日期轉換函數to_datetime()的語法格式如下:pandas.to_datetime(strDate,format,errors='raise')該函數參數說明如下:?strDate:表示字符型時間列;?format:表示日期時間格式符。?errors:取值范圍為{'ignore','raise','coerce'},默認為'raise'。?如果取值為“raise”,則無效的數據將引發異常。?如果取值為“coerce”,則無效的數據將設置為NaN。?如果取值為“ignore”,則無效的數據將返回輸入。2.日期格式化日期格式化是將日期時間型數據,按照指定格式,轉為字符型數據。日期格式化函數的語法格式如下:df_dt.apply(lambdax:datetime.strftime(x,format))或df_dt.dt.strftime(format)該函數參數說明如下:?df_dt:表示數據集中日期時間列名。?format:表示時間日期格式符,如表5-2所示。3.日期抽取日期抽取是指從日期格式中抽取出需要的部分內容,日期抽取語法格式如下:df_perty該函數參數說明如下:?df_dt:表示數據集中日期時間列名。?property:表示時間屬性。5.4Pandas數據重塑5.4.1重塑層次化索引1.使用stack()函數將數據的列索引轉換為行索引stack()函數可以將數據的列索引轉換為行索引,stack()函數的語法格式如下:stack(level=-1,dropna=True)該函數返回值為DataFrame或Series對象。函數參數說明如下:?level:表示操作索引的級別或級別名稱。默認值為-1,表示操作內層索引;如果其值設置為0,則表示操作外層索引。?dropna:接收布爾值,默認值為True,表示自動將旋轉后的缺失值刪除;如果其值設置為1,則表示保留缺失值。2.使用unstack()函數將數據的行索引轉換為列索引unstack()函數可以將數據的行索引轉換為列索引,unstack()函數的語法格式如下:DataFrame.unstack(level=-1,fill_value=None)或Series.unstack(level=-1,fill_value=None)該函數返回值為DataFrame或Series。函數參數說明如下:?level:表示unstack索引的級別或級別名稱。默認值為-1,表示操作內層索引,如果其值設置為0,則表示操作外層索引。?fill_value:默認值為None,如果設置其他值,則旋轉過程中產生了缺失值,則用該參數的值替換NaN缺失值。5.4.2使用pivot()函數實現軸向旋轉Pandas提供了pivot()函數,該函數會根據給定的行索引或列索引重新組織一個DataFrame對象,即將一個DataFrame的記錄數據整合成表格,俗稱數據透視,類似Excel中的數據透視表功能,它返回重塑的DataFrame,這樣的好處是使得數據更加的直觀和容易分析。pivot()函數的語法結構如下:pivot(index=None,columns=None,values=None)或者pivot(index,columns,values)其含義與作用是將index指定為行索引,columns指定為列索引,values則是填充新DataFrame對象中的值。即根據DataFrame的3列數據生成數據透視表,使用索引/列中的唯一值并填充值。該函數參數說明如下:?index:為可選參數,可接收string或object類型的值,用于創建新DataFrame對象行索引的列名稱。如果未指定,則使用原DataFrame對象的索引。?columns:可接收string或object類型的值,用于創建新DataFrame對象列索引的列名稱。如果未指定,則使用原DataFrame對象的索引?values:用于填充新DataFrame對象中值的列名稱。如果未指定,則將使用剩余列進行填充,結果將具有分層索引列。5.4.3使用melt()函數將DataFrame從寬格式轉換為長格式數據分析時經常要把寬數據格式轉換為長數據格式,有點像excel的逆透視過程。melt()函數的語法格式如下:melt(id_vars=None,value_vars=None,var_name=None,value_name='value',col_level=None)該函數的功能為:將DataFrame壓縮為一種格式,其中一列或多列是標識符變量(id_vars),而所有其他列均視為測量變量(value_vars),相對于行軸為“unpivoted”,僅留下兩個非標識符列‘variable’和‘value’。該函數參數說明如下:?id_vars:為可選參數,用作標識符變量的列。?value_vars:為可選參數,要取消透視的列。如果未指定,則使用未設置為id_vars的所有列。?var_name:用于自定義“variable”列的名稱。如果沒有,則使用“variable”。?value_name:用于自定義“value”列的名稱,默認為“value”。?col_level:為可選參數,如果列是MultiIndex,則使用此級別進行融合。5.4.4使用pivot_table()函數聚合與透視數據Pandas提供了制作數據透視表的函數pivot_table(),pivot_table()函數用于將列數據設定為行索引和列索引,并可以聚合運算。pivot_table()函數的語法格式如下:dataframe.pivot_table(values=None,index=None,columns=None,aggfunc='mean',fill_value=None,margins=False,dropna=True,margins_name='All')或pandas.pivot_table(data,values=None,index=None,columns=None,ag
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工業園區電力設施規劃與管理
- 工業廢棄地到綠色公園的改造案例
- 工業機器人技術與應用發展研究
- 工業機器人技術及其自動化應用
- 工業機器人技術的選型與應用案例
- 工業物聯網驅動產業升級的關鍵技術
- 工業自動化系統設計與優化
- 工業污染防治的技術創新與實施效果評價
- 工業物聯網IIoT技術及應用前景
- 工業環保與清潔生產實踐
- GB/T 16631-2008高效液相色譜法通則
- 國際技術貿易法課件
- 國家開放大學電大本科網絡課《數學思想與方法》機考網考形考題庫及答案
- 1999年國家《行測》真題
- 借閱檔案聯系函(借閱其本人檔案原件)
- 鋁熱焊探傷技術總結
- 進度計劃橫道圖及施工進度網絡圖140天工期
- 爆破安全生產獎懲管理制度
- 尊法、學法、守法、用法分析
- (完整版)鋼筋加工棚驗算
- 動物生物化學(全套577PPT課件)
評論
0/150
提交評論