您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“pandas.cut怎么用”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“pandas.cut怎么用”這篇文章吧。
用途
pandas.cut用來把一組數(shù)據(jù)分割成離散的區(qū)間。比如有一組年齡數(shù)據(jù),可以使用pandas.cut將年齡數(shù)據(jù)分割成不同的年齡段并打上標(biāo)簽。
原型
pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise') #0.23.4
參數(shù)含義
x:被切分的類數(shù)組(array-like)數(shù)據(jù),必須是1維的(不能用DataFrame);
bins:bins是被切割后的區(qū)間(或者叫“桶”、“箱”、“面元”),有3中形式:一個(gè)int型的標(biāo)量、標(biāo)量序列(數(shù)組)或者pandas.IntervalIndex 。
一個(gè)int型的標(biāo)量
當(dāng)bins為一個(gè)int型的標(biāo)量時(shí),代表將x平分成bins份。x的范圍在每側(cè)擴(kuò)展0.1%,以包括x的最大值和最小值。
標(biāo)量序列
標(biāo)量序列定義了被分割后每一個(gè)bin的區(qū)間邊緣,此時(shí)x沒有擴(kuò)展。
pandas.IntervalIndex
定義要使用的精確區(qū)間。
right:bool型參數(shù),默認(rèn)為True,表示是否包含區(qū)間右部。比如如果bins=[1,2,3],right=True,則區(qū)間為(1,2],(2,3];right=False,則區(qū)間為(1,2),(2,3)。
labels:給分割后的bins打標(biāo)簽,比如把年齡x分割成年齡段bins后,可以給年齡段打上諸如青年、中年的標(biāo)簽。labels的長(zhǎng)度必須和劃分后的區(qū)間長(zhǎng)度相等,比如bins=[1,2,3],劃分后有2個(gè)區(qū)間(1,2],(2,3],則labels的長(zhǎng)度必須為2。如果指定
labels=False,則返回x中的數(shù)據(jù)在第幾個(gè)bin中(從0開始)。
retbins:bool型的參數(shù),表示是否將分割后的bins返回,當(dāng)bins為一個(gè)int型的標(biāo)量時(shí)比較有用,這樣可以得到劃分后的區(qū)間,默認(rèn)為False。
precision:保留區(qū)間小數(shù)點(diǎn)的位數(shù),默認(rèn)為3.
include_lowest:bool型的參數(shù),表示區(qū)間的左邊是開還是閉的,默認(rèn)為false,也就是不包含區(qū)間左部(閉)。
duplicates:是否允許重復(fù)區(qū)間。有兩種選擇:raise:不允許,drop:允許。
返回值
out:一個(gè)pandas.Categorical, Series或者ndarray類型的值,代表分區(qū)后x中的每個(gè)值在哪個(gè)bin(區(qū)間)中,如果指定了labels,則返回對(duì)應(yīng)的label。
bins:分隔后的區(qū)間,當(dāng)指定retbins為True時(shí)返回。
例子
這里拿給年齡分組當(dāng)做例子。
import numpy as np import pandas as pd ages = np.array([1,5,10,40,36,12,58,62,77,89,100,18,20,25,30,32]) #年齡數(shù)據(jù)
將ages平分成5個(gè)區(qū)間
ages = np.array([1,5,10,40,36,12,58,62,77,89,100,18,20,25,30,32]) pd.cut(ages, 5)
輸出:
[(0.901, 20.8], (0.901, 20.8], (0.901, 20.8], (20.8, 40.6], (20.8, 40.6], ..., (0.901, 20.8], (0.901, 20.8], (20.8, 40.6], (20.8, 40.6], (20.8, 40.6]]
Length: 16
Categories (5, interval[float64]): [(0.901, 20.8] < (20.8, 40.6] < (40.6, 60.4] < (60.4, 80.2] < (80.2, 100.0]]
可以看到ages被平分成5個(gè)區(qū)間,且區(qū)間兩邊都有擴(kuò)展以包含最大值和最小值。
將ages平分成5個(gè)區(qū)間并指定labels
ages = np.array([1,5,10,40,36,12,58,62,77,89,100,18,20,25,30,32]) #年齡數(shù)據(jù) pd.cut(ages, 5, labels=[u"嬰兒",u"青年",u"中年",u"壯年",u"老年"])
輸出:
[嬰兒, 嬰兒, 嬰兒, 青年, 青年, ..., 嬰兒, 嬰兒, 青年, 青年, 青年]
Length: 16
Categories (5, object): [嬰兒 < 青年 < 中年 < 壯年 < 老年]
給ages指定區(qū)間進(jìn)行分割
ages = np.array([1,5,10,40,36,12,58,62,77,89,100,18,20,25,30,32]) #年齡數(shù)據(jù) pd.cut(ages, [0,5,20,30,50,100], labels=[u"嬰兒",u"青年",u"中年",u"壯年",u"老年"])
輸出:
[嬰兒, 嬰兒, 青年, 壯年, 壯年, ..., 青年, 青年, 中年, 中年, 壯年]
Length: 16
Categories (5, object): [嬰兒 < 青年 < 中年 < 壯年 < 老年]
這里不再平分ages,而是將ages分為了5個(gè)區(qū)間(0, 5],(5, 20],(20, 30],(30,50],(50,100].
返回分割后的bins
令retbins=True即可
ages = np.array([1,5,10,40,36,12,58,62,77,89,100,18,20,25,30,32]) #年齡數(shù)據(jù) pd.cut(ages, [0,5,20,30,50,100], labels=[u"嬰兒",u"青年",u"中年",u"壯年",u"老年"],retbins=True)
輸出:
([嬰兒, 嬰兒, 青年, 壯年, 壯年, ..., 青年, 青年, 中年, 中年, 壯年]
Length: 16
Categories (5, object): [嬰兒 < 青年 < 中年 < 壯年 < 老年],
array([ 0, 5, 20, 30, 50, 100]))
只返回x中的數(shù)據(jù)在哪個(gè)bin
令labels=False即可
ages = np.array([1,5,10,40,36,12,58,62,77,89,100,18,20,25,30,32]) #年齡數(shù)據(jù) pd.cut(ages, [0,5,20,30,50,100], labels=False)
輸出:
array([0, 0, 1, 3, 3, 1, 4, 4, 4, 4, 4, 1, 1, 2, 2, 3], dtype=int64)
第一個(gè)0表示1在第0個(gè)bin中。
以上是“pandas.cut怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。