Pandas對數(shù)值進(jìn)行分箱操作的4種方法總結(jié)_第1頁
Pandas對數(shù)值進(jìn)行分箱操作的4種方法總結(jié)_第2頁
Pandas對數(shù)值進(jìn)行分箱操作的4種方法總結(jié)_第3頁
Pandas對數(shù)值進(jìn)行分箱操作的4種方法總結(jié)_第4頁
Pandas對數(shù)值進(jìn)行分箱操作的4種方法總結(jié)_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第Pandas對數(shù)值進(jìn)行分箱操作的4種方法總結(jié)目錄前言1、betweenloc2、cut3、qcut4、value_counts

前言

使用Pandas的between、cut、qcut和value_count離散化數(shù)值變量。

分箱是一種常見的數(shù)據(jù)預(yù)處理技術(shù)有時也被稱為分桶或離散化,他可用于將連續(xù)數(shù)據(jù)的間隔分組到箱或桶中。在本文中,我們將討論使用pythonPandas庫對數(shù)值進(jìn)行分箱的4種方法。

我們創(chuàng)建以下合成數(shù)據(jù)用于演示

import

pandas

as

pd

#

version

1.3.5

import

numpy

as

np

def

create_df():

df

=

pd.DataFrame({'score':

np.random.randint(0,101,1000)})

return

df

create_df()

df.head()

數(shù)據(jù)包括1000名學(xué)生的0到100分的考試分?jǐn)?shù)。而這次的任務(wù)是將數(shù)字分?jǐn)?shù)分為值A(chǔ)、B和C的等級,其中A是最好的等級,C是最差的等級。

1、betweenloc

Pandas.between方法返回一個包含True的布爾向量,用來對應(yīng)的Series元素位于邊界值left和right之間。

參數(shù)有下面三個:

left:左邊界right:右邊界inclusive:要包括哪個邊界??山邮艿闹禐閧both、neither、left、right}。

根據(jù)以下間隔規(guī)則將學(xué)生的分?jǐn)?shù)分為等級:

A:(80,100]B:(50,80]C:[0,50]

其中方括號[和圓括號)分別表示邊界值是包含的和不包含的。我們需要確定哪個分?jǐn)?shù)在感興趣的區(qū)間之間,并為其分配相應(yīng)的等級值。注意看下面的不同的參數(shù)表示是否包含邊界

df.loc[df['score'].between(0,

50,

'both'),

'grade']

=

'C'

df.loc[df['score'].between(50,

80,

'right'),

'grade']

=

'B'

df.loc[df['score'].between(80,

100,

'right'),

'grade']

=

'A'

以下是每個分?jǐn)?shù)區(qū)間的人數(shù):

df.grade.value_counts()

C488

B310

A202

Name:grade,dtype:int64

此方法需要為每個bin編寫處理的代碼,因此它僅適用于bin很少的情況。

2、cut

可以使用cut將值分類為離散的間隔。此函數(shù)對于從連續(xù)變量到分類變量也很有用。

cut的參數(shù)如下:

x:要分箱的數(shù)組。必須是一維的。bins:標(biāo)量序列:定義允許非均勻?qū)挾鹊腷in邊緣。labels:指定返回的bin的標(biāo)簽。必須與上面的bins參數(shù)長度相同。include_lowest:(bool)第一個區(qū)間是否應(yīng)該是左包含的。

bins

=

[0,

50,

80,

100]

labels

=

['C',

'B',

'A']

df['grade']

=

pd.cut(x

=

df['score'],

bins

=

bins,

labels

=

labels,

include_lowest

=

True)

這樣就創(chuàng)建一個包含bin邊界值的bins列表和一個包含相應(yīng)bin標(biāo)簽的標(biāo)簽列表。

查看每個區(qū)段的人數(shù)

df.grade.value_counts()

C488

B310

A202

Name:grade,dtype:int64

結(jié)果與上面示例相同。

3、qcut

qcut可以根據(jù)排名或基于樣本分位數(shù)將變量離散為大小相等的桶[3]。

在前面的示例中,我們?yōu)槊總€級別定義了分?jǐn)?shù)間隔,這回使每個級別的學(xué)生數(shù)量不均勻。在下面的示例中,我們將嘗試將學(xué)生分類為3個具有相等(大約)數(shù)量的分?jǐn)?shù)等級。示例中有1000名學(xué)生,因此每個分箱應(yīng)該有大約333名學(xué)生。

qcut參數(shù):

x:要分箱的輸入數(shù)組。必須是一維的。q:分位數(shù)。10表示十分位數(shù),4表示四分位數(shù)等。也可以是交替排列的分位數(shù),例如[0,.25,.5,.75,1.]四分位數(shù)。labels:指定bin的標(biāo)簽。必須與生成的bin長度相同。retbins:(bool)是否返回(bins,labels)。

df['grade'],

cut_bin

=

pd.qcut(df['score'],

q

=

3,

labels

=

['C',

'B',

'A'],

retbins

=

True)

df.head()

print

(cut_bin)

[

0.

36.

68.

100.]

分?jǐn)?shù)間隔如下:

C:[0,36]B:(36,68]A:(68,100]

使用.value_counts()檢查每個等級有多少學(xué)生。理想情況下,每個箱應(yīng)該有大約333名學(xué)生。

df.grade.value_counts()

C340

A331

B329

Name:grade,dtype:int64

4、value_counts

雖然pandas.value_counts通常用于計算系列中唯一值的數(shù)量,但它也可用于使用bins參數(shù)將值分組到半開箱中。

df['score'].value_counts(bins

=

3,

sort

=

False)

默認(rèn)情況下,.value_counts按值的降序?qū)Ψ祷氐南盗羞M(jìn)行排序。將sort設(shè)置為False以按其索引的升序?qū)ο盗羞M(jìn)行排序。

(-0.101,33.333]310

(33.333,66.667]340

(66.667,100.0]350

Name:score,dtype:int64

series索引是指每個bin的區(qū)間范圍,其中方括號[和圓括號)分別表示邊界值是包含的和不包含的。返回series的值表示每個bin中有多少條記錄。

與.qcut不同,每個bin中的記錄數(shù)不一定相同(大約)。.value_counts不會將相同數(shù)量的記錄分配到相同的類別中,而是根據(jù)最高和最低分?jǐn)?shù)將分?jǐn)?shù)范圍分成3個相等的部分。分?jǐn)?shù)的最小值為0,最大值為100,因此這3個部分中的每一個都大約在33.33范圍內(nèi)。這也解釋了為什么bin的邊界是33.33的倍數(shù)。

我們還可以通過傳入邊界列表來定義bin邊界。

df['score'].value_counts(bins

=

[0,50,80,100],

sort

=

False)

(-0.001,50.0]

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論