分享6個(gè)祖?zhèn)鞯膒andas數(shù)據(jù)處理代碼
↑?關(guān)注 + 星標(biāo)?,每天學(xué)Python新技能
后臺(tái)回復(fù)【大禮包】送你Python自學(xué)大禮包
今天和大家分享自己總結(jié)的6個(gè)常用的Pandas數(shù)據(jù)處理代碼,對(duì)于經(jīng)常處理數(shù)據(jù)的coder最好熟練掌握。
選取有空值的行
在觀察數(shù)據(jù)結(jié)構(gòu)時(shí),該方法可以快速定位存在缺失值的行。
df?=?pd.DataFrame({'A':?[0,?1,?2],
???????????????????'B':?[0,?1,?None],
???????????????????'C':?[0,?None,?2]})
df[df.isnull().T.any()]
輸出:
??A???B???C???????????A???B???C
0?0?0.0?0.0?????????1?1?1.0?NaN
1?1?1.0?NaN???-->???2?2?NaN?2.0
2?2?NaN?2.0
快速替換列值
實(shí)際數(shù)據(jù)處理經(jīng)常會(huì)根據(jù)一些限定條件來(lái)替換列中的值。
df?=?pd.DataFrame({'name':['Python',?'Java',?'C']})
#?第一種方式
df['name'].replace('Java',?'JavaScript',?inplace=True)
#?第二種方式
df.loc[df['name'].str.contains('Java'),?'name']?=?'JavaScript'
輸出:
?????name???????????????????name
0??Python??????????0??????Python
1????Java????--->??1??JavaScript
2???????C??????????2???????????C
對(duì)列進(jìn)行分區(qū)
很多情況下,對(duì)于數(shù)值類型的數(shù)據(jù),我們需要分區(qū)來(lái)計(jì)算每個(gè)區(qū)間數(shù)據(jù)出現(xiàn)的頻率。這時(shí)用 pd.cut 就能很好的解決這一問(wèn)題。
import?random
age?=?random.sample(range(90),?20)
cut_res?=?pd.cut(age,?bins=[0,?18,?35,?60,?90])
# cut_res type:
cut_res.value_counts()
輸出:
(0,?18]?????6
(18,?35]????1
(35,?60]????6
(60,?90]????7
將一列分為多列
在文本數(shù)據(jù)清洗時(shí),一些列中存在分隔符('', ',', ':')分隔的值,我們只需將該列根據(jù)分隔符進(jìn)行 split 即可。
import?pandas?as?pd
df?=?pd.DataFrame({'address':?['四川省?成都市',
???????????????????????????????'湖北省?武漢市',
???????????????????????????????'浙江省?杭州市']})
res?=?df['address'].str.split('?',?expand=True)??
res.columns?=?['province',?'city']
輸出:
??province?city
0?四川省????成都市
1?湖北省????武漢市
2?浙江省????杭州市
expand參數(shù)選擇是否擴(kuò)展為 DataFrame,False 則返回 Series
中文篩選
同樣在清洗過(guò)程中,往往會(huì)出現(xiàn)一些不需要的中文字段,這時(shí)直接用 str.contains 篩選即可。
df?=?pd.DataFrame({'mobile_phone':
???????????????????['15928765644',
????????????????????'15567332235',
????????????????????'暫無(wú)']})
df[~df['mobile_phone'].str.contains('[\u4e00-\u9fa5]')]
輸出:
??mobile_phone?????????mobile_phone
0?15928765644????????0?15928765644
1?15567332235???-->??1?15567332235
2?暫無(wú)
更改列的位置
有時(shí)我們需要調(diào)整列的位置,當(dāng)數(shù)據(jù)列較少時(shí),可以用下面的方式
df?=?pd.DataFrame({'name':?['A',?'B',?'C'],
???????????????????'age':?[10,?20,?30],
???????????????????'gender':?[0,?1,?0]})
df?=?df[['name',?'gender',?'age']]
輸出:
?name?age?gender????name?gender?age
0???A??10?0????????0???A?0???????10
1???B??20?1???-->??1???B?1???????20
2???C??30?0????????2???C?0???????30
如果列較多,那么,一個(gè)個(gè)列舉出來(lái)會(huì)比較繁瑣,推薦下面插入的方式。
col?=?df['gender']
df.drop('gender',?axis=1,?inplace=True)
df.insert(1,?'gender',?col)
這就是今天分享的主要內(nèi)容,實(shí)踐永遠(yuǎn)是最好的學(xué)習(xí)方式,記憶的也更牢固。原創(chuàng)不易,如果能點(diǎn)個(gè)贊就是對(duì)小編最大的支持!

您看此文用? ?
?分?
?
秒,轉(zhuǎn)發(fā)只需1秒


?
?分?
?
秒,轉(zhuǎn)發(fā)只需1秒