財務大數(shù)據(jù)-Python基礎 課件 3.4Pandas-數(shù)據(jù)清洗_第1頁
財務大數(shù)據(jù)-Python基礎 課件 3.4Pandas-數(shù)據(jù)清洗_第2頁
財務大數(shù)據(jù)-Python基礎 課件 3.4Pandas-數(shù)據(jù)清洗_第3頁
財務大數(shù)據(jù)-Python基礎 課件 3.4Pandas-數(shù)據(jù)清洗_第4頁
財務大數(shù)據(jù)-Python基礎 課件 3.4Pandas-數(shù)據(jù)清洗_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

Pandas-數(shù)據(jù)清洗課前回顧map()函數(shù):Series.map(),可接收函數(shù)、字典;apply()函數(shù):Series.apply()、DataFrame.apply(),用DataFrame時需要指定axis參數(shù);applymap()函數(shù):DataFrame.applymap(),對DataFrame每個元素執(zhí)行指定函數(shù)。數(shù)據(jù)清洗數(shù)據(jù)分析結(jié)果的優(yōu)劣主要依賴于數(shù)據(jù)的優(yōu)劣,我們在網(wǎng)絡上獲取的數(shù)據(jù)往往存在著許多問題,如:數(shù)據(jù)缺失、數(shù)據(jù)重復、數(shù)據(jù)異常等等,直接對這些數(shù)據(jù)進行統(tǒng)計分析,將會導致分析結(jié)論偏離實際,因此,在數(shù)據(jù)分析之前通常需要先對數(shù)據(jù)進行清洗。數(shù)據(jù)清洗:是對數(shù)據(jù)進行重新審查和校驗的過程,目的在于通過預定的清理規(guī)則將不符合要求的數(shù)據(jù)轉(zhuǎn)化為滿足質(zhì)量要求的數(shù)據(jù)。數(shù)據(jù)清洗主要內(nèi)容:重復值處理:刪除;缺失值處理:刪除、填充;其他異常處理:數(shù)據(jù)中特殊字符刪除、數(shù)據(jù)格式更改、無法識別數(shù)據(jù)處理、英文大小寫轉(zhuǎn)換等。數(shù)據(jù)清洗在數(shù)據(jù)清洗之前,首先必須明確數(shù)據(jù)存在哪些問題,再針對各問題逐一擊破。分析數(shù)據(jù)問題:重復行缺失值存在異常符號:¥、逗號、空格目錄01020304重復值處理缺失值處理其他異常處理dataClean()函數(shù)01重復值處理

重復值處理對于重復值的處理,首先可以先檢驗是否存在重復值,然后再將重復值刪除。Pandas提供了兩個專門處理重復值的函數(shù),分別是duplicated()函數(shù)和drop_duplicates()函數(shù):duplicated():用于查找重復項drop_duplicates():刪除重復項duplicated()函數(shù)duplicated()函數(shù):用于查找重復項,返回布爾值,將重復項標記為True,非重復項標記為False。常用參數(shù)描述subset根據(jù)特定列識別重復項,默認使用所有列keep確定要標記的重復項,可選'first'、'last'、False,默認為'first',表示標記除第一次出現(xiàn)的重復項,'last'表示標記除最后一次出現(xiàn)的重復項,F(xiàn)alse表示標記所有重復項duplicated()函數(shù)語法:DataFrame.duplicated(subset=None,keep='first')查找重復項示例1代碼#引入numpy、pandasimportpandasaspd#讀取dataClean.xlsxdf=pd.read_excel('/webpython/course/d2633ec9ca5c4a288b73f97b4616d541/dataClean.xlsx')#查找重復項print(df.duplicated())輸出結(jié)果:0False1False2False3True4False5False6Truedtype:booldrop_duplicates()函數(shù)drop_duplicates()函數(shù):返回刪除重復行的DataFrame。常用參數(shù)描述subset根據(jù)特定列識別重復項,默認使用所有列keep確定要保留的重復項,可選'first'、'last'、False,默認為'first',表示保留第一次出現(xiàn)的重復項,'last'表示保留最后一次出現(xiàn)的重復項,F(xiàn)alse表示刪除所有重復項inplace默認為False,True表示直接在原數(shù)據(jù)上刪除ignore_index重建索引,默認為Falsedrop_duplicates()函數(shù)語法:DataFrame.drop_duplicates(subset=None,keep='first',inplace=False,ignore_index=False)刪除重復項示例2代碼#刪除重復項df.drop_duplicates(inplace=True)#使用show_table()函數(shù)展示dfshow_table(df)提示duplicated()和drop_duplicates()判斷標準和邏輯一樣,可直接使用drop_duplicates()刪除重復項02缺失值處理

缺失值處理在處理缺失值之前可以先檢查缺失值數(shù)量,然后根據(jù)數(shù)據(jù)分析要求,選擇以下常用方法進行處理:刪除數(shù)據(jù):根據(jù)缺失比例刪除行、列;使用默認值填充:可用空字符串或數(shù)值0替換;使用估算值填充:采用中位數(shù)、平均數(shù)、眾數(shù)等替換。isna():檢測缺失值;dropna():刪除缺失的值;fillna():使用指定的方法填充NA/NaN值。isna()函數(shù)isna()函數(shù):檢測缺失值,返回布爾值,缺失值被映射為True,非缺失值被映射為False。示例3代碼#檢測缺失值df1=df.isna().apply(lambdax:x.value_counts())#使用show_table()函數(shù)展示df1show_table(df1)提示df.isna():查看缺失值位置;df.isna().any():判斷某一列是否有缺失值;df.isna().sum():統(tǒng)計每列缺失值數(shù)量;df.isna().sum().sum():統(tǒng)計DataFrame中缺失值合計數(shù);Series.value_counts()函數(shù):統(tǒng)計Series中不同元素出現(xiàn)的次數(shù),在DataFrame中使用時,需要指定對哪一列或行使用。dropna()函數(shù)dropna()函數(shù)語法:DataFrame.dropna(axis=0,how='any',thresh=None,subset=None,inplace=False)常用參數(shù)描述axis默認axis=0,表示刪除包含缺失值的行,axis=1,表示刪除包含缺失值的列how默認how='any',表示刪除含有缺失值的所有行或列,how='all',表示刪除全為缺失值的行或列threshint,保留含有int個非空值的行、列subset對特定列進行缺失值刪除inplace默認為False,True表示直接在原數(shù)據(jù)上更改刪除數(shù)據(jù)示例4代碼#刪除全為NaN的列df.dropna(axis=1,how='all',inplace=True)#使用show_table()函數(shù)展示dfshow_table(df)刪除數(shù)據(jù)在清洗缺失值時,可通過指定dropna()參數(shù)值確定刪除數(shù)據(jù)的條件,歸納如下:刪除條件行列含有NaNDataFrame.dropna()DataFrame.dropna(axis=1)全為NaNDataFrame.dropna(how='all')DataFrame.dropna(axis=1,how='all')不足n個非空值DataFrame.dropna(thresh=n)DataFrame.dropna(axis=1,thresh=n)特定列為NaN的行DataFrame.dropna(subset=['col1','col2'])---fillna()函數(shù)fillna()函數(shù)語法:DataFrame.fillna(value=None,method=None,axis=None,inplace=False,limit=None,downcast=None)常用參數(shù)描述value用于填充的值:數(shù)值、字符串、變量、字典、series、DataFrame,不能使用列表method填充方法:{'backfill','bfill','pad','ffill',None},默認為None,指定填充值,pad/ffill表示用前一個非缺失值填充,backfill/bfill表示用后一個非缺失值填充axis填充缺失值所沿的軸,默認為Noneinplace默認為False,True表示直接在原數(shù)據(jù)上填充limit限制填充次數(shù)使用默認值填充示例5代碼#以0填充所有缺失值df2=df.fillna(0)#使用show_table()函數(shù)展示df2show_table(df2)使用估算值填充示例6代碼#以每列平均值填充該列缺失值df3=df.fillna(df.mean())#使用show_table()函數(shù)展示df3show_table(df3)03其他異常處理其他異常處理我們獲取的數(shù)據(jù)除了重復值、缺失值之外往往還存在許多其他問題,常見異常情況處理如下:特殊字符刪除:將所有數(shù)據(jù)轉(zhuǎn)換為字符串,使用replace()函數(shù)進行替換;數(shù)據(jù)類型更改:根據(jù)需求使用astype()函數(shù)更改數(shù)據(jù)類型;無法識別數(shù)據(jù)處理:替換默認值、或替換為NaN再進行處理;大小寫轉(zhuǎn)換:upper()、lower()函數(shù)。注意將DataFrame元素替換為NaN:DataFrame.replace(to_replace,np.nan)將DataFrame整列替換為NaN:DataFrame['col']=np.nanastype()函數(shù)astype()函數(shù):將pandas對象轉(zhuǎn)換為指定的數(shù)據(jù)類型。astype()函數(shù)語法:DataFrame.astype(dtype,copy=True,errors='raise')常用參數(shù)描述dtype數(shù)據(jù)類型:使用numpy.dtype或Python類型將整個pandas對象轉(zhuǎn)換為相同類型,也可對特定列進行轉(zhuǎn)換copy布爾值,默認為True,表示返回一個副本errors針對數(shù)據(jù)類型轉(zhuǎn)換無效引發(fā)異常的處理,默認為'raise',表示允許引發(fā)異常,errors='ignore'抑制異常,錯誤時返回原始對象注意整數(shù)→浮點數(shù):可以轉(zhuǎn)換;浮點數(shù)→整數(shù):小數(shù)部分被截斷;字符串→浮點數(shù):若字符串全為數(shù)字則可以轉(zhuǎn)換。查看數(shù)據(jù)類型代碼#查看各元素數(shù)據(jù)類型show_table(df.applymap(type))特殊字符處理、數(shù)據(jù)類型更改示例7代碼#用空字符串替換各元素中的¥、空格、逗號df=df.applymap(lambdax:str(x).replace('','').replace(',','').replace('¥',''))#將期間設為索引,其余數(shù)據(jù)轉(zhuǎn)換為浮點數(shù)df=df.set_index('期間').astype('float')#以每列平均值填充該列缺失值df=df.fillna(df.mean())#使用show_table()函數(shù)展示dfshow_table(df)特殊字符處理、數(shù)據(jù)類型更改提示清洗數(shù)據(jù)格式后即可使用各列平均值填充空值。set_index()與reset_index()set_index()函數(shù):將DataFrame中的列設為行索引。set_index函數(shù)語法:DataFrame.set_index(keys,drop=True,append=False,inplace=False,verify_integrity=False)常用參數(shù)描述keys需要設為索引的列,單個列名或多個列名組成的列表drop默認為True,刪除用作新索引的列append默認為False,是否將列追加到現(xiàn)有索引inplace默認為False,True表示直接在原數(shù)據(jù)上更改verify_integrity默認為False,檢查新索引是否重復set_index()與reset_index()reset_index()函數(shù):重置索引,并使用默認索引。reset_index函數(shù)語法:DataFrame.reset_index(level=None,drop=False,inplace=False,col_level=0,col_fill='')常用參數(shù)描述level從索引中刪除給定級別,默認情況下刪除所有級別,可用int、str、tuple、listdrop是否刪除原索引,默認為False,表示重置后將索引列還原為普通列inplace默認為False,True表示直接在原數(shù)據(jù)上更改col_level如果列有多個級別,則確定將還原的索引列插入哪個級別,默認插入第一級col_fill如果列有多個級別,則確定如何命名其他級別,如果為None,則重復索引名04dataClean()整合數(shù)據(jù)清洗代碼代碼importpandasaspd#讀取dataClean.xlsxdf=pd.read_excel('/webpython/course/d2633ec9ca5c4a288b73f97b4616d541/dataClean.xlsx')#刪除重復項df.drop_duplicates(inplace=True)#刪除全為NaN的列df.dropna(axis=1,how='all',inplace=True)#用空字符串替換各元素中的¥、空格、逗號df=df.applymap(lambdax:str(x).replace('','').replace(',','').replace('¥',''))#將期間設為索引,其余數(shù)據(jù)轉(zhuǎn)換為浮點數(shù)df=df.set_index('期間').astype('float')#以每列平均值填充該列缺失值df=df.fillna(df.mean())show_table(df)dataClean():科云內(nèi)置數(shù)據(jù)清洗函數(shù)通過整合數(shù)據(jù)清洗的代碼,可以發(fā)現(xiàn),即使是最基礎的數(shù)據(jù)清洗也需大量代碼,那么,我們能否自定義數(shù)據(jù)清洗的函數(shù)呢?自定義數(shù)據(jù)清洗函數(shù)需要考慮的因素眾多,推薦使用科云平臺內(nèi)置的數(shù)據(jù)清洗函數(shù):dataClean()函數(shù):默認清洗符號包括空格、短橫線(-)、制表符(\t)、換行符(\n)、回車符(\r),清洗后若是數(shù)字則返回浮點數(shù)類型,其他返回字符串類型。提示短橫線(-)清洗規(guī)則:純數(shù)字:當做負號,不作處理;其他:默認清洗dataClean():科云內(nèi)置數(shù)據(jù)清洗函數(shù)dataClean()函數(shù)語法:dataClean(s,list=[],clean_word=False,clean_nan=True)函數(shù)參數(shù)說明s需要清洗的字符串,支持其他數(shù)據(jù)類型傳入,調(diào)用函數(shù)后將其他數(shù)據(jù)類型轉(zhuǎn)換為字符串進行處理list需要額外清洗的字符,以列表形式傳入clean_word是否清洗漢字

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論