pandas之cut
cut( )用來把一組數(shù)據(jù)分割成離散的區(qū)間。
cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise') # x:被切分的數(shù)據(jù),必須是一維的 # bins:①int型整數(shù):將x按照數(shù)值大小平均分成分成bins份,x的范圍在最左側(cè)和最右側(cè)分別擴(kuò)展0.1%以包括最大值和最小值#②標(biāo)量序列:自定義分組的每個(gè)區(qū)間,此時(shí)嚴(yán)格按照給定的區(qū)間分割,x最左和最右不擴(kuò)展#③pandas.IntervalIndex # right:布爾值,默認(rèn)為True,表示分割后包含區(qū)間右側(cè)值不包含左側(cè)值,False表示分割后包含左側(cè)值不包括右側(cè)值 # labels:分組后bins的標(biāo)簽,默認(rèn)為None顯示分割后屬于的區(qū)間 # retbins:返回結(jié)果中是否包括bins,一般bins參數(shù)使用整數(shù)時(shí) # precision:保留的小數(shù)點(diǎn)位數(shù),默認(rèn)為3 # include_lowest:如果自定義標(biāo)量序列分組,第一個(gè)區(qū)間是否包含左側(cè)最小值 # duplicates:是否允許區(qū)間重復(fù)?
bins設(shè)置為整數(shù),將一維數(shù)組平均分為5份
arr = np.array([1,77,10,89,36,12,58,62,5,40,32,18,20,25,30,100]) c = pd.cut(arr,5,precision=1) print(c) # [(0.9, 20.8], (60.4, 80.2], (0.9, 20.8], (80.2, 100.0], (20.8, 40.6], ..., (0.9, 20.8], (0.9, 20.8], (20.8, 40.6], (20.8, 40.6], (80.2, 100.0]] # Length: 16 # Categories (5, interval[float64]): [(0.9, 20.8] < (20.8, 40.6] < (40.6, 60.4] < (60.4, 80.2] < (80.2, 100.0]]系統(tǒng)自動(dòng)根據(jù)數(shù)組中數(shù)值的大小將原數(shù)據(jù)平均分為5分,每個(gè)區(qū)間間隔為19.8。整個(gè)區(qū)間的起點(diǎn)為(1,100],由于右側(cè)包含了100因此最大區(qū)間的最大值無需擴(kuò)展,而由于不包括1,因此最小區(qū)間的最小值需向左擴(kuò)展0.1% * 100 = 0.1,即1-0.1 = 0.9。
設(shè)置retbins=True,會(huì)將分割區(qū)間以數(shù)組形式顯示出來,這個(gè)參數(shù)一般在bins設(shè)置為整數(shù)時(shí)使用,因?yàn)槠渌鸼ins兩種方式都是自定義了這個(gè)區(qū)間。
arr = np.array([1,5,10,40,36,12,58,62,77,89,100,18,20,25,30,32]) c = pd.cut(arr,5,precision=1,retbins = True) print(c) # ([(0.9, 20.8], (0.9, 20.8], (0.9, 20.8], (20.8, 40.6], (20.8, 40.6], ..., (0.9, 20.8], (0.9, 20.8], (20.8, 40.6], (20.8, 40.6], (20.8, 40.6]] # Length: 16 # Categories (5, interval[float64]): [(0.9, 20.8] < (20.8, 40.6] < (40.6, 60.4] < (60.4, 80.2] < (80.2, 100.0]], \# array([ 0.901, 20.8 , 40.6 , 60.4 , 80.2 , 100. ]))
?
bins自定義分組序列,并指定lables
c = pd.cut(arr,bins = [1,5,18,35,50,100],labels = ['幼兒','少年','青年','中年','老年'],precision=1) print(c) # [NaN, 老年, 少年, 老年, 中年, ..., 少年, 青年, 青年, 青年, 老年] # Length: 16 # Categories (5, object): [幼兒 < 少年 < 青年 < 中年 < 老年]上述示例的意思是,將原數(shù)組按照1-5、5-18、18-35、35-50、50-100(左開右閉)的區(qū)間進(jìn)行劃分,劃分后分別對應(yīng)幼兒、少年、青年、中年、老年。
但是由于默認(rèn)為左開區(qū)間所以無法將最小值劃到一個(gè)給定的區(qū)間(如果設(shè)置right=False則最大值無對應(yīng)區(qū)間),因此原數(shù)組中的第一個(gè)數(shù)1返回的是NaN,可以設(shè)置參數(shù)include_lowest=True,則可將最小是包含進(jìn)去。
c = pd.cut(arr,bins = [1,5,18,35,50,100],labels = ['幼兒','少年','青年','中年','老年'],precision=1,include_lowest=True) print(c) # [幼兒, 老年, 少年, 老年, 中年, ..., 少年, 青年, 青年, 青年, 老年] # Length: 16 # Categories (5, object): [幼兒 < 少年 < 青年 < 中年 < 老年]?
?
上述例子的返回結(jié)果包含三項(xiàng),第一項(xiàng)是每個(gè)數(shù)屬于哪個(gè)區(qū)間,第二個(gè)是原數(shù)組長度,第三個(gè)是Category對象
如果只想顯示第一項(xiàng)、即數(shù)組中的每個(gè)值屬于哪個(gè)區(qū)間,可設(shè)置為labels = False
c= pd.cut(arr,bins = [1,5,18,35,50,100],labels=False,include_lowest=True) print(c) # [0 0 1 3 3 1 4 4 4 4 4 1 2 2 2 2]?
轉(zhuǎn)載于:https://www.cnblogs.com/Forever77/p/11342851.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的pandas之cut的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用faker生成测试数据
- 下一篇: robot:截图关键字