使用pandas實現連續資料的離散化處理方式(分箱操作)
阿新 • • 發佈:2020-01-09
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實現連續資料的離散化處理方式(分箱操作)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。