像excel一樣使用python,上一期介紹了生成掂墓、查看谦纱、替換等功能,這一期介紹數(shù)據(jù)預(yù)處理君编,包括數(shù)據(jù)表合并跨嘉、排序、分組等吃嘿。
1.合并
Excel里智能復(fù)制粘貼來(lái)合并表格祠乃,或者通過(guò)VLOOKUP函數(shù)分步實(shí)現(xiàn)梦重。python中,可以直接使用merge函數(shù)來(lái)合并兩個(gè)表亮瓷,可選參數(shù)較多琴拧,這里只介紹最常用的幾個(gè)參數(shù):
df1.merge(df2,how='inner',on=None,left_on=None,right_on=None)
或:pandas.merge(df1,df2,how='inner'…)
將df1與df2合并,how為合并方式嘱支,有“inner蚓胸、outer、left除师、right”4種選擇沛膳,分別為“求交集、并集馍盟、固定左邊于置、固定右邊”茧吊。On代表用于連接的鍵名贞岭,如果兩表合并對(duì)象的列名不同,使用left_on=None, right_on=None來(lái)分別指定搓侄。在默認(rèn)情況下瞄桨,merge會(huì)自動(dòng)以重疊的列名按inner的方式合并。
importpandasaspd
frompandasimportDataFrame,Series
df1=DataFrame({'gene':['arx1','arx2','arx3','arx4'],
'size':[411,530,289,450]})
df2=DataFrame([['arx2','kana-A'],['arx3','kana-B'],
['arx4','pdm-V'],['arx5','pdm-V1']],
columns=['gene','homo'])
df_inner=pd.merge(df1,df2,how='inner',on='gene')
printdf_inner
輸出:
gene size?? homo
0? arx2? 530? kana-A
1? arx3? 289? kana-B
2? arx4? 450?? pdm-V
2.排序
在excel中讶踪,使用數(shù)據(jù)-排序可以對(duì)數(shù)據(jù)表直接進(jìn)行排序芯侥。
在python中,可以使用sort_values和sort_index函數(shù)進(jìn)行排序乳讥。
printdf1.sort_values(by=['size'])
輸出:
gene? size
2? arx3?? 289
0? arx1?? 411
3? arx4?? 450
1? arx2?? 530
而sort_index可以按索引進(jìn)行排序柱查。
df_inner.set_index('size')
#將size列作為索引df_inner.sort_index()
#使用索引進(jìn)行排序
3.分組
在excel中,使用“公式-插入函數(shù)-LOOKUP-選擇分組列與分組條件”進(jìn)行分組云石。
在python中唉工,使用where函數(shù)對(duì)值進(jìn)行判斷。
df1['group']=np.where(df1['size'] >300,'long','short')
printdf1
輸出:
gene? size? group
0? arx1?? 411?? long
1? arx2?? 530?? long
2? arx3?? 289? short
3? arx4?? 450?? long
4.分列
即將一列按固定規(guī)則分為多列汹忠。在excel中淋硝,可使用“數(shù)據(jù)-分列”進(jìn)行分拆。
在python中宽菜,使用split函數(shù)谣膳。若以“-”為分隔符,對(duì)“homo”列中的所有元素進(jìn)行分割铅乡,index與df2保持一致继谚,列重新取名為“category”和“number”,則表達(dá)式如下:
df3=DataFrame((x.split('-')forxindf2['homo']),index=df2.index,columns=['category','number'])
printdf3
輸出:
category number
0???? kana????? A
1???? kana????? B
2????? pdm????? V
3????? pdm???? V1
5.數(shù)據(jù)提取
按索引進(jìn)行提取使用loc函數(shù)阵幸。
printdf1.loc[:2]
#提取從0至1的數(shù)據(jù)printdf1.loc[1]
#提取索引為1的數(shù)據(jù)
按位置提取犬庇,使用iloc函數(shù)僧界,將橫縱方向標(biāo)簽均從0開(kāi)始計(jì)算。
printdf1.iloc[2,2]
#第三行第三列的數(shù)據(jù)printdf1.iloc[:3,:3]
#前三行前三列的數(shù)據(jù)
同時(shí)又按索引又按位置提取臭挽,使用ix函數(shù)捂襟。
df1=df1.set_index('gene')
#將gene設(shè)為索引列printdf1.ix[:'arx2',:3]
#索引arx2之前及0-2列部分
按條件提取,可使用isin函數(shù)欢峰。Isin函數(shù)用來(lái)判斷是否為給定值葬荷,是返回“True”,否返回“False”纽帖。將isin函數(shù)嵌套如loc函數(shù)中宠漩,可以輸出結(jié)果為“True”的數(shù)據(jù)。
printdf1['group'].isin(['long'])
輸出:
0???? True
1???? True
2??? False
3???? True
Name: group, dtype: bool
printdf1.loc[df1['group'].isin(['long'])]
輸出:
gene? size group
0? arx1?? 411? long
1? arx2?? 530? long
3? arx4?? 450? long
6.數(shù)據(jù)篩選
Excel中可以使用“數(shù)據(jù)-篩選”根據(jù)字段進(jìn)行篩選懊直。
Python中可使用與扒吁、或、非室囊,”&”雕崩、”|”、”!=”和loc函數(shù)一起進(jìn)行篩選融撞。例如篩選size>400盼铁,homo帶有kana的數(shù)據(jù):
printdf_inner.loc[(df_inner['size'] >400)&(df_inner['homo'].isin(['kana-A']))]
或者使用query函數(shù)進(jìn)行搜索。
printdf_inner.query('size>400')
本文參考:
Python For Data Analysis
藍(lán)鯨網(wǎng)站分析博客尝偎,作者藍(lán)鯨(王彥平)