1. 程式人生 > 程式設計 >使用pandas實現連續資料的離散化處理方式(分箱操作)

使用pandas實現連續資料的離散化處理方式(分箱操作)

Python實現連續資料的離散化處理主要基於兩個函式,pandas.cut和pandas.qcut,前者根據指定分界點對連續資料進行分箱處理,後者則可以根據指定箱子的數量對連續資料進行等寬分箱處理,所謂等寬指的是每個箱子中的資料量是相同的。

下面簡單介紹一下這兩個函式的用法:

# 匯入pandas包
import pandas as pd
ages = [20,22,25,27,21,23,37,31,61,45,41,32] # 待分箱資料
bins = [18,35,60,100] # 指定箱子的分界點

pandas.cut函式 :

cats1 = pd.cut(ages,bins)
cats1

cats1結果:

[(18,25],(18,(25,35],...,(60,100],(35,60],35]]
Length: 12
Categories (4,interval[int64]): [(18,25] < (25,35] < (35,60] < (60,100]]
# labels引數為False時,返回結果中用不同的整數作為箱子的指示符
cats2 = pd.cut(ages,bins,labels=False) 
cats2 # 輸出結果中的數字對應著不同的箱子

cats2結果:

 array([0,1,2,3,1],dtype=int64)
pd.value_counts(cats1) # 對不同箱子中的數進行計數

計數結果:

(18,25]  5
(35,60]  3
(25,35]  3
(60,100] 1
dtype: int64
pd.cut(ages,[18,26,36,right=False) # 指定分箱區間是左閉右開

改變區間開閉結果:

[[18,26),[26,36),[61,100),[36,61),36)]
Length: 12
Categories (4,interval[int64]): [[18,26) < [26,36) < [36,61) < [61,100)]
# 可以將想要指定給不同箱子的標籤傳遞給labels引數
group_names = ['Youth','YoungAdult','MiddleAged','Senior']
cuts3 = pd.cut(ages,labels=group_names) 
cuts3

cats3結果:

[Youth,Youth,YoungAdult,Senior,MiddleAged,YoungAdult]
Length: 12
Categories (4,object): [Youth < YoungAdult < MiddleAged < Senior]

pandas.qcut函式:

qcats1 = pd.qcut(ages,q=4) # 引數q指定所分箱子的數量
qcats1

qcats1結果:

[(19.999,22.75],(19.999,(22.75,29.0],(29.0,38.0],(38.0,61.0],38.0]]
Length: 12
Categories (4,interval[float64]): [(19.999,22.75] < (22.75,29.0] < (29.0,38.0] <
(38.0,61.0]]
qcats1.value_counts() # 從輸出結果可以看到每個箱子中的資料量時相同的

計數結果:

(19.999,22.75] 3
(22.75,29.0]  3
(29.0,38.0]  3
(38.0,61.0]  3
dtype: int64

​​​參考:《利用Python進行資料分析》——Wes McKinney 第二版

以上這篇使用pandas實現連續資料的離散化處理方式(分箱操作)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。