版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第8章 用pandas進(jìn)行數(shù)據(jù)預(yù)處理學(xué)習(xí)目標(biāo): 掌握重復(fù)值、缺失值和異常值的處理。 掌握數(shù)據(jù)合并和數(shù)據(jù)抽取。 掌握重塑層次化索引、映射與數(shù)據(jù)轉(zhuǎn)換。 掌握排列與隨機(jī)抽樣。 掌握日期和字符串處理。 數(shù)據(jù)清洗是發(fā)現(xiàn)并糾正數(shù)據(jù)文件中可識別的錯誤,如移除重復(fù)數(shù)據(jù),處理缺失值和空格值,檢測和過濾異常值,并檢查數(shù)據(jù)一致性等。通過數(shù)據(jù)清洗不僅要使通過清洗后的數(shù)據(jù)變的可用,而且還要使數(shù)據(jù)變的更加適合進(jìn)行后續(xù)的數(shù)據(jù)分析工作。 從數(shù)據(jù)采集所獲得的原始數(shù)據(jù)集中,往往會存在著許多重復(fù)數(shù)據(jù)。所謂重復(fù)數(shù)據(jù)是指在數(shù)據(jù)結(jié)構(gòu)中所有列的內(nèi)容都相同,即行重復(fù)。而處理重復(fù)數(shù)據(jù)是數(shù)據(jù)分析中經(jīng)常要面對的問題之一。 8.1.1 重復(fù)值的處理
2、 pandas提供了duplicated()和drop_duplicates()函數(shù)可用于標(biāo)記及刪除重復(fù)數(shù)據(jù)。 1、duplicated()函數(shù) duplicated()函數(shù)用于標(biāo)記Series中的值、DataFrame中的記錄行是否是重復(fù),重復(fù)為True,不重復(fù)為False。函數(shù)語法格式及參數(shù)說明見教材。 2、drop_duplicates()函數(shù) drop_duplicates()函數(shù)用于刪除Series、DataFrame中重復(fù)記錄,并返回刪除重復(fù)后的結(jié)果。函數(shù)語法格式及參數(shù)說明見教材。 示例【例8-1】 8.1.1重復(fù)值的處理 在Python中,pandas使用浮點(diǎn)值NaN表示浮點(diǎn)數(shù)和
3、非浮點(diǎn)數(shù)組中的缺失值,同時Python內(nèi)置None值也會被當(dāng)作是缺失值。在處理缺失值之前,首先要判斷缺失值是否存在,然后再對缺失值進(jìn)行刪除、填充或者不處理的操作。 1、判斷缺失值的函數(shù) (1)isnull()函數(shù):用于檢查空值或缺失值的對象;如果有空值或缺失值則返回True,否則返回False。 (2)notnull()函數(shù):用于檢查不為空值或缺失值的對象;如果有空值或缺失值則返回False,否則返回True。 通過isnull()函數(shù)和sum()函數(shù)可以獲得Series和DataFrame中缺失值的數(shù)量 8.1.2 缺失值的處理 2、處理缺失值的方法 (1)刪除含有缺失值的記錄 在數(shù)據(jù)分析中
4、,如果數(shù)據(jù)集的樣本很大,并且在刪除含有缺失值的記錄后,不會影響分析結(jié)果的客觀性和準(zhǔn)確性時,一般是使用dropna()函數(shù)直接將空值或缺失值的數(shù)據(jù)刪除。 dropna()函數(shù)說明見教材,應(yīng)用示例【例8-2】。 (2)數(shù)據(jù)插補(bǔ)法 在數(shù)據(jù)分析中,如果數(shù)據(jù)集的樣本比較少或者由于刪除含有缺失值的記錄會影響到數(shù)據(jù)分析結(jié)果的客觀性和準(zhǔn)確性時,就需要根據(jù)數(shù)據(jù)插補(bǔ)的方法來選擇填充值,然后再使用fillna()函數(shù)對空值或缺失值進(jìn)行填充。 fillna()函數(shù)說明、常用數(shù)據(jù)插補(bǔ)方法見表8-1見教材,應(yīng)用示例【例8-3】 8.1.2 缺失值的處理 所謂異常值,就是在數(shù)據(jù)集中存在不合理的值,又稱離群點(diǎn)。例如年齡為負(fù)數(shù)
5、,成績大于100或小于零,商品評分超出5分或商品日銷售量遠(yuǎn)遠(yuǎn)超過年銷售量等,都屬于異常值的范圍。 1. 判別數(shù)據(jù)集中異常值方法 (1)散點(diǎn)圖分析 (2)簡單統(tǒng)計(jì)分析 例如,年齡屬性值的區(qū)間規(guī)定為0:150,如果數(shù)據(jù)集樣本中的年齡值不在該區(qū)間范圍內(nèi),則表示該樣本的年齡屬性屬于異常值。 8.1.3 異常值的處理 1. 判別數(shù)據(jù)集中異常值方法 (3)3原則 3原則是指當(dāng)數(shù)據(jù)服從正態(tài)分布時,根據(jù)正態(tài)分布的定義可知,距離平均值3之外的概率為 P(|x-|3) ),小于(=),小于等于(=),不等于(!=)。 范圍運(yùn)算:between(left,right)。 空值匹配:pandas.isnull(col
6、umn)。字符匹配:str.contains(patten,na=False),其中na參數(shù)是指空值的處理方式,如為False,不匹配空值。邏輯運(yùn)算:與(&),或(|),取反(not)。 示例【例8-8】 8.3.2 記錄抽取 在數(shù)據(jù)處理時,有時需要對數(shù)據(jù)的結(jié)構(gòu)進(jìn)行重排,也稱作是重塑(reshape)或者軸向旋轉(zhuǎn)(pivot)。在pandas中提供了實(shí)現(xiàn)重塑的兩個函數(shù),即stack()函數(shù)和unstuck()函數(shù)。 常見的數(shù)據(jù)層次化結(jié)構(gòu)有兩種,一種是表格,如圖8-3所示,另一種是“花括號”,如圖8-4所示。 1、stack()函數(shù) stack()函數(shù)將數(shù)據(jù)從”表格結(jié)構(gòu)“變成”花括號結(jié)構(gòu)“,即將
7、其行索引變成列索引。 2、unstack()函數(shù) unstack()函數(shù)將數(shù)據(jù)從”花括號結(jié)構(gòu)“變成”表格結(jié)構(gòu)“,即要將其中一層的列索引變成行索引。 stack()函數(shù)和unstuck()函數(shù)格式和參數(shù)見教材。示例代碼example8-4.py。 8.4 重塑層次化索引 映射就是創(chuàng)建一個映射關(guān)系列表,把元素和一個特定的標(biāo)簽或者字符串綁定起來。定義映射關(guān)系最好是使用字典。 例如:map = label1:value1,label2:value2, 在pandas中提供了利用映射關(guān)系來實(shí)現(xiàn)某些操作的函數(shù)如下。1、利用replace()函數(shù)替換元素 例如,創(chuàng)建字典fruits用于指明水果標(biāo)識和水果名稱
8、的映射關(guān)系。 fruits = 101:orange,102:apple,103:banana 如要將用于存儲水果標(biāo)識、水果數(shù)量和單價(jià)的DataFrame對象中的水果標(biāo)識替換成水果名稱,就需要運(yùn)用replace()函數(shù),通過fruits映射關(guān)系來實(shí)現(xiàn)元素的替換。replace()函數(shù)的基本語法格式和參數(shù)見教材。示例【例8-9】 8.5.1 用映射替換元素在【例8-9】中介紹了利用函數(shù)和映射來實(shí)現(xiàn)將水果標(biāo)識替換成水果名稱的方法。但是有時需要保留水果標(biāo)識,將水果名稱添加到數(shù)據(jù)集中。那么,這時可利用map()函數(shù),通過構(gòu)建fruits映射關(guān)系來實(shí)現(xiàn)元素的添加。map()函數(shù)的基本語法格式和參數(shù)見教材
9、。示例【例8-10】 8.5.2 用映射添加元素 在數(shù)據(jù)處理中,有時需要使用映射關(guān)系轉(zhuǎn)換軸標(biāo)簽。pandas的rename()函數(shù),是以表示映射關(guān)系的字典對象作為參數(shù),替換軸的索引標(biāo)簽。 rename()函數(shù)的基本語法格式和參數(shù)見教材。示例【例8-11】8.5.3 重命名軸索引 1. 排列 利用numpy.random.permutation()函數(shù),可以返回一個序列的隨機(jī)排列。將此隨機(jī)排列作為take()函數(shù)的參數(shù),通過應(yīng)用take()函數(shù)就可實(shí)現(xiàn)按此隨機(jī)排列來調(diào)整Series對象或DataFrame對象各行的順序。 示例代碼example8-6.py。 2. 隨機(jī)采樣 隨機(jī)抽樣是指隨機(jī)從數(shù)
10、據(jù)中按照一定的行數(shù)或者比例抽取數(shù)據(jù)。隨機(jī)抽樣的函數(shù):numpy.random.randint(start,end,size) 函數(shù)中的參數(shù)說明見教材。 示例代碼example8-7.py。8.6 排列與隨機(jī)抽樣 1日期轉(zhuǎn)換 日期轉(zhuǎn)換是指將字符型的日期格式的數(shù)據(jù)轉(zhuǎn)換成為日期型數(shù)據(jù)的過程。日期轉(zhuǎn)換函數(shù)to_datetime()的語法格式: pandas.to_datetime(dateString,format) 函數(shù)中的參數(shù)說明: dateString:表示字符型時間列。 format:表示時間日期格式,見表8-2。8.7 日期轉(zhuǎn)換、日期格式化和日期抽取 2、日期格式化 日期格式化是將時間日期型
11、數(shù)據(jù),按照指定格式,轉(zhuǎn)為字符型數(shù)據(jù)。日期格式化函數(shù): df_dt.apply(lambda x: datetime.strftime(x, format) 或 df_dt.dt.strftime(format) 函數(shù)中的參數(shù)說明: df_dt:表示數(shù)據(jù)框中時間列名。 format:表示時間日期格式,見表8-2。8.7 日期轉(zhuǎn)換、日期格式化和日期抽取 3、日期抽取 日期抽取是指從日期格式里面抽取出需要的部分屬性。 抽取語法:df_perty 參數(shù)說明: df_dt:表示數(shù)據(jù)框中時間列名。 property:表示時間屬性,見表8-3示例代碼example8-8.py。8.7 日期轉(zhuǎn)換、日期格式化和
12、日期抽取 在pandas字符串操作中,常用的字符串處理方法如下。 1. 字符串拆分 split()函數(shù)的作用是通過指定分隔符對字符串進(jìn)行切片,如果參數(shù) num 有指定值,則僅分隔 num 個子字符串,其語法格式: str.split(str=, num=string.count(str) 參數(shù)說明: str:表示字符串的分隔符,默認(rèn)為所有的空字符,包括空格、換行(n)、制表符(t)等。 num:表示分割次數(shù)。 函數(shù)返回值:分割后的字符串列表。 示例代碼example8-9.py。8.8.1 內(nèi)置的字符串處理方法 在pandas字符串操作中,常用的字符串處理方法如下。 2、移除字符串頭尾指定的字
13、符 strip()函數(shù)可用于移除字符串頭尾指定的字符(默認(rèn)為空格)。 示例代碼example8-10.py。 3、字符串連接 join()函數(shù)可以將字符串、元組、列表中的元素以指定的字符(分隔符)連接生成一個新的字符串。 示例代碼example8-11.py8.8.1 內(nèi)置的字符串處理方法 在pandas字符串操作中,常用的字符串處理方法如下。 4、判斷是否是子字符串 判斷是否是子字符串可以使用in關(guān)鍵字,或者使用find()函數(shù)和index()函數(shù)判斷一個子字符串的位置。 find()函數(shù)作用是查找子字符串,若找到返回從0開始的下標(biāo)值,若找不到返回-1。find()函數(shù)返回值是返回子字符串第
14、一次出現(xiàn)的位置的下標(biāo)值。 index()函數(shù)作用是在字符串里查找子串第一次出現(xiàn)的位置,類似字符串的find方法,如果查找不到子串,會拋出異常。 示例代碼example8-12.py8.8.1 內(nèi)置的字符串處理方法 在pandas字符串操作中,常用的字符串處理方法如下。 5、判斷子字符串出現(xiàn)的次數(shù) count()函數(shù)可用于統(tǒng)計(jì)字符串里某個字符出現(xiàn)的次數(shù),函數(shù)的可選參數(shù)為字符串搜索的開始與結(jié)束位置。函數(shù)返回值:返回子字符串在字符串中出現(xiàn)的次數(shù)。 示例代碼example8-13.py 6、替換子字符串 replace()函數(shù)可將字符串中的old(舊字符串)替換成new(新字符串),如果指定第三個參數(shù)
15、max,則替換不超過max次。 示例代碼example8-14.py8.8.1 內(nèi)置的字符串處理方法 正則表達(dá)式是一個特殊的字符序列,使用正則表達(dá)能很方便地在文中查找和匹配字符串模式。Python自1.5版本起增加了re模塊,re模塊使Python語言擁有全部的正則表達(dá)式功能。 單條正則表達(dá)式通常被稱作regex,它是根據(jù)正則表達(dá)式語言編寫的字符串。Python內(nèi)置的re模塊用于操作regex對象。只有使用import re語句,先導(dǎo)入re模塊,才能使用正則表達(dá)式。 re模塊所提供的函數(shù)分為三類:模式匹配、替換和拆分。8.8.2 正則表達(dá)式 1、compile()函數(shù) compile()函數(shù)用
16、于編譯正則表達(dá)式,生成一個正則表達(dá)式(Pattern)對象,供match()和search()這兩個函數(shù)使用。 2、正則表達(dá)式對象 正則表達(dá)式對象也稱為RegexObject對象。 (1)正則表達(dá)式修飾符 正則表達(dá)式修飾符標(biāo)志(flags)參數(shù)見表8-4 8.8.2 正則表達(dá)式 2、正則表達(dá)式對象 (2)正則表達(dá)式模式 正則表達(dá)式模式是使用特殊的語法來表示一個正則表達(dá)式,它的規(guī)則:正則表達(dá)式模式中的字母和數(shù)字匹配相同的字符串。多數(shù)字母和數(shù)字前加一個反斜杠時會擁有不同的含義。標(biāo)點(diǎn)符號只有被轉(zhuǎn)義時才匹配自身,否則它們表示特殊的含義。反斜杠本身需要使用反斜杠轉(zhuǎn)義。由于正則表達(dá)式通常都包含反斜杠,如模
17、式元素rt,等價(jià)于 t。因此,正則表達(dá)式中一般都使用r.(raw字符串)來定義規(guī)則字符串。正則表達(dá)式模式語法中的特殊元素見表8-58.8.2 正則表達(dá)式 3、re.match()函數(shù) re.match()函數(shù)嘗試從字符串的起始位置匹配一個模式,如果不是起始位置匹配成功的話,match()就返回none。 示例代碼example8-15.py。 4、 re.search()函數(shù) re.search()函數(shù)掃描整個字符串并返回第一個成功的匹配。 示例代碼example8-16.py。 注意:re.match()函數(shù)只匹配字符串的開始,如果字符串開始不符合正則表達(dá)式,則匹配失敗,函數(shù)返回None;而
18、re.search()函數(shù)匹配整個字符串,直到找到一個匹配。8.8.2 正則表達(dá)式 5、檢索和替換 re模塊提供了re.sub()函數(shù)用于替換字符串中的匹配項(xiàng)。 示例代碼example8-17.py。 6、findall()函數(shù) findall()函數(shù)可在字符串中找到正則表達(dá)式所匹配的所有子串,并返回一個列表,如果沒有找到匹配的,則返回空列表。 示例代碼example8-18.py。 8.8.2 正則表達(dá)式 7、re.finditer()函數(shù) finditer()函數(shù)與findall()函數(shù)類似,可在字符串中找到正則表達(dá)式所匹配的所有子串,并把它們作為一個迭代器返回。 示例代碼example8-19.py。 8、re.split()函數(shù) split()函數(shù)按照能夠匹配的子串將字符串分割后返回列表。 示例代碼example8-20.py。8.8.2 正則表達(dá)式 1、cat()字符串連接 cat()
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 互聯(lián)網(wǎng)行業(yè)產(chǎn)品設(shè)計(jì)心得分享
- 五年級班主任期末工作總結(jié)培養(yǎng)品德成就未來
- 2024年版餐飲業(yè)廚師聘用合同版B版
- 學(xué)生給恩師的畢業(yè)贈言
- 日用品行業(yè)美工工作總結(jié)
- 滑動窗口協(xié)議課程設(shè)計(jì)
- 2024年文藝演出場地租賃與餐飲服務(wù)配套合同3篇
- 年度員工發(fā)言稿15篇
- 2024年消防用管材購銷標(biāo)準(zhǔn)合同版B版
- 2024年油罐拆除與環(huán)保節(jié)能安裝工程合同3篇
- 新高處安裝維護(hù)拆除作業(yè)專題培訓(xùn)課件
- 名校內(nèi)部必修二《政治生活》關(guān)鍵詞句歸類
- 深基坑事故案例
- 誡勉談話檢討書3篇
- 行車時遇突發(fā)故障的應(yīng)急辦法演示
- 倉儲管理員高級工題庫及參考答案
- XX公司學(xué)歷、職稱、技能工資補(bǔ)貼規(guī)定
- 川省成都市2022屆高二上學(xué)期期末考試:英語
- 消防安全操作規(guī)程
- 廣東省江門市2022-2023學(xué)年高一上學(xué)期期末調(diào)研考試物理試題(一)
- 蘇州市蘇教版五年級下冊數(shù)學(xué)第三單元第12課《因數(shù)和倍數(shù)整理練習(xí)(第2課時)》課件
評論
0/150
提交評論