接著上篇繼續(xù)。數(shù)據(jù)獲取之后并不能直接分析或使用,因?yàn)槔锩嬗泻芏酂o(wú)效的垃圾數(shù)據(jù),所以必須要經(jīng)過(guò)處理才可以。數(shù)據(jù)處理的主要內(nèi)容包括數(shù)據(jù)清洗、數(shù)據(jù)抽取、數(shù)據(jù)交換和數(shù)據(jù)計(jì)算等。
數(shù)據(jù)清洗
數(shù)據(jù)清洗是數(shù)據(jù)價(jià)值鏈中最關(guān)鍵的一步。垃圾數(shù)據(jù)即使是通過(guò)最好的分析也可能會(huì)產(chǎn)生錯(cuò)誤的結(jié)果,并造成較大的誤導(dǎo)。
數(shù)據(jù)清洗就是處理缺失數(shù)據(jù)以及清除無(wú)意義的信息,如刪除原始數(shù)據(jù)集中的無(wú)關(guān)數(shù)據(jù)、重復(fù)數(shù)據(jù)、平滑噪音數(shù)據(jù),篩選掉與分析主題無(wú)關(guān)的數(shù)據(jù)等等。
重復(fù)值的處理
步驟如下:
1 利用DataFrame中的duplicated方法返回一個(gè)布爾型的Series,顯示是否有重復(fù)行。沒(méi)有顯示FALSE,有則從重復(fù)的第二行起顯示為T(mén)RUE
2 在利用DataFrame中的drop_duplicates方法返回一個(gè)移除了重復(fù)行的DataFrame
duplicated的格式:
duplicated(subset=None, keep='first')
括號(hào)中的參數(shù)均為可選,不寫(xiě)默認(rèn)判斷全部列
subset用于識(shí)別重復(fù)的列標(biāo)簽或列標(biāo)簽序號(hào),默認(rèn)是所有的列標(biāo)簽
keep為first表示除了第一次出現(xiàn)外,其余相同的數(shù)據(jù)被標(biāo)記為重復(fù);為last表示除了最后一次外,其余相同的數(shù)據(jù)被標(biāo)記為重復(fù);為false表示所有相同的數(shù)據(jù)都被標(biāo)記為重復(fù)
drop_duplicates的格式:
drop_duplicates()
如果你想指定某個(gè)列就在括號(hào)里加入列名即可
from?pandas?import?DataFrame from?pandas?import?Series #造數(shù)據(jù) df=DataFrame({'age':Series([26,85,85]),'name':Series(['xiaoqiang1','xiaoqiang2','xiaoqiang2'])}) df #判斷是否有重復(fù)行 df.duplicated() #移除重復(fù)行 df.drop_duplicates()
缺失值的處理
缺失值的處理一般包括兩個(gè)步驟,分別是缺失數(shù)據(jù)的識(shí)別和缺失數(shù)據(jù)的處理。
缺失數(shù)據(jù)的識(shí)別
pandas使用浮點(diǎn)值NaN表示浮點(diǎn)和非浮點(diǎn)數(shù)組里的缺失數(shù)據(jù),并使用isnull和notnull函數(shù)來(lái)判斷缺失情況。
#缺失數(shù)據(jù)的識(shí)別 from?pandas?import?DataFrame from?pandas?import?read_excel #有缺失數(shù)據(jù) df=read_excel(r'D:python_workspaceanacondarz.xlsx',?sheetname='Sheet2') df #識(shí)別缺失數(shù)據(jù),NaN的就會(huì)顯示True。notnull函數(shù)正好相反 df.isnull()
rz.xlsx的內(nèi)容如下
缺失數(shù)據(jù)的處理
對(duì)于缺失數(shù)據(jù)的處理有數(shù)據(jù)補(bǔ)齊、刪除對(duì)應(yīng)的行、不處理。這里直接擼代碼解釋
#接著上面的繼續(xù),進(jìn)行數(shù)據(jù)的處理 #去除數(shù)據(jù)中值為空的數(shù)據(jù)行 newdf=df.dropna() newdf #用其他數(shù)值代替NaN newdf2=df.fillna('--') newdf2 #用前一個(gè)數(shù)據(jù)值代替NaN newdf3=df.fillna(method='pad') newdf3 #用后一個(gè)數(shù)據(jù)值代替NaN newdf4=df.fillna(method='bfill') newdf4 #傳入一個(gè)字典對(duì)不同的列填充不同的值 newdf5=df.fillna({'數(shù)分':100,'高代':99}) newdf5 #用平均數(shù)來(lái)代替NaN。會(huì)自動(dòng)計(jì)算有NaN兩列的數(shù)據(jù)的平均數(shù) newdf6=df.fillna(df.mean()) newdf6 #還可以使用strip()來(lái)去除數(shù)據(jù)左右的指定字符,這個(gè)是python的基礎(chǔ)了,這里不做演示了
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
