溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Pandas如何剔除混合數(shù)據(jù)中非數(shù)字的數(shù)據(jù)操作

發(fā)布時(shí)間:2021-03-26 10:48:37 來源:億速云 閱讀:774 作者:小新 欄目:開發(fā)技術(shù)

小編給大家分享一下Pandas如何剔除混合數(shù)據(jù)中非數(shù)字的數(shù)據(jù)操作,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

我們?nèi)粘D玫降臄?shù)據(jù),指標(biāo)字段有時(shí)會(huì)混入非數(shù)字的數(shù)據(jù),這時(shí)候會(huì)影響我們的操作

nameheight
Hang180
Ben145
Chonotknow
XIn189

比如read_csv讀入時(shí),該列會(huì)以object形式讀入,也不能直接進(jìn)行計(jì)算,不然會(huì)出現(xiàn)如unsupported operand type(s) for +: 'float' and 'str'的錯(cuò)誤

這時(shí)候就需要進(jìn)行數(shù)據(jù)預(yù)處理,清除掉指標(biāo)值中非數(shù)字的數(shù)據(jù),這里我以2012_FederalElectionCommission_Database數(shù)據(jù)為例。

首先讀入數(shù)據(jù),可以發(fā)現(xiàn)提示:Columns (6) have mixed types,這里Columns (6)是指標(biāo)值混有字符串格式數(shù)據(jù)

fec = pd.read_csv('P00000001-ALL.csv')
D:\SOFTWARE\Anaconda\lib\site-packages\IPython\core\interactiveshell.py:2717: DtypeWarning: Columns (6) have mixed types. Specify dtype option on import or set low_memory=False.
 interactivity=interactivity, compiler=compiler, result=result)
#先使用str打開數(shù)據(jù)
fec = pd.read_csv('P00000001-ALL.csv',dtype={'contbr_zip':str})
 
#然后使用str函數(shù)isdigit()判斷單元格是否全為數(shù)字
 
fec_isnum=fec.iloc[:,6].str.isdigit()
 
#得到使用bool索引把全為數(shù)字的表格cleaned
 
cleaned = fec[fec_isnum].copy()

補(bǔ)充:pandas如何去掉、過濾數(shù)據(jù)集中的某些值或者某些行?

在進(jìn)行數(shù)據(jù)分析與清理中,我們可能常常需要在數(shù)據(jù)集中去掉某些異常值。具體來說,看看下面的例子。

Pandas如何剔除混合數(shù)據(jù)中非數(shù)字的數(shù)據(jù)操作

0.導(dǎo)入我們需要使用的包

import pandas as pd

pandas是很常用的數(shù)據(jù)分析,數(shù)據(jù)處理的包。anaconda已經(jīng)有這個(gè)包了,純凈版python的可以自行pip安裝。

1.去掉某些具體值

數(shù)據(jù)集df中,對(duì)于屬性appPlatform(最后一列),我們想刪除掉取值為2的那些樣本。

如何做?非常簡(jiǎn)單。

import pandas as pd
df[(True-df['appPlatform'].isin([2]))]

Pandas如何剔除混合數(shù)據(jù)中非數(shù)字的數(shù)據(jù)操作

當(dāng)然,有時(shí)候我們需要去掉不止一個(gè)值,這個(gè)時(shí)候只需要在isin([])的列表中添加。更具體來說,例如,對(duì)于appID這個(gè)屬性,我們想去掉appID=278和appID=382的樣本。

df[(True-df['appID'].isin([278,382]))]

Pandas如何剔除混合數(shù)據(jù)中非數(shù)字的數(shù)據(jù)操作

另外,我們有時(shí)候并不只是考慮某一列,還需要考慮另外若干列的情況。例如,我們需要過濾掉appPlatform=2而且appID=278和appID=382的樣本呢?非常簡(jiǎn)單。

df[(True-df['appID'].isin([278,382]))&(True-df['appPlatform'].isin([2]))]

其實(shí),在這里我們看到,就是由兩部分組成的,第一部分就是appID中等于278和382的,另外一部分就是appPlatform中等于2的。兩者取邏輯關(guān)系 與(&)

Pandas如何剔除混合數(shù)據(jù)中非數(shù)字的數(shù)據(jù)操作

2.過濾掉某個(gè)范圍的值

上面我們是了解了如何取掉某個(gè)具體值,下面,我們要看看如何過濾掉某個(gè)范圍的值。

對(duì)于數(shù)據(jù)集df,我們想過濾掉creativeID(第一列)中ID值大于10000的樣本。

df[df['creativeID']<=10000]

Pandas如何剔除混合數(shù)據(jù)中非數(shù)字的數(shù)據(jù)操作

另外,如果要考慮多列的話,其實(shí)和上面一樣,將兩種情況做邏輯與(&)就可以,不過值得注意的是,每個(gè)條件要用括號(hào)()括起來。

看完了這篇文章,相信你對(duì)“Pandas如何剔除混合數(shù)據(jù)中非數(shù)字的數(shù)據(jù)操作”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI