使用pandas實(shí)現(xiàn)連續(xù)數(shù)據(jù)的離散化處理方式(分箱操作)
Python實(shí)現(xiàn)連續(xù)數(shù)據(jù)的離散化處理主要基于兩個(gè)函數(shù),pandas.cut和pandas.qcut,前者根據(jù)指定分界點(diǎn)對(duì)連續(xù)數(shù)據(jù)進(jìn)行分箱處理,后者則可以根據(jù)指定箱子的數(shù)量對(duì)連續(xù)數(shù)據(jù)進(jìn)行等寬分箱處理,所謂等寬指的是每個(gè)箱子中的數(shù)據(jù)量是相同的。
下面簡單介紹一下這兩個(gè)函數(shù)的用法:
# 導(dǎo)入pandas包 import pandas as pd ages = [20, 22, 25, 27, 21, 23, 37, 31, 61, 45, 41, 32] # 待分箱數(shù)據(jù) bins = [18, 25, 35, 60, 100] # 指定箱子的分界點(diǎn)
pandas.cut函數(shù) :
cats1 = pd.cut(ages, bins) cats1
cats1結(jié)果:
[(18, 25], (18, 25], (18, 25], (25, 35], (18, 25], ..., (25, 35], (60, 100], (35, 60], (35, 60], (25, 35]] Length: 12 Categories (4, interval[int64]): [(18, 25] < (25, 35] < (35, 60] < (60, 100]] # labels參數(shù)為False時(shí),返回結(jié)果中用不同的整數(shù)作為箱子的指示符 cats2 = pd.cut(ages, bins,labels=False) cats2 # 輸出結(jié)果中的數(shù)字對(duì)應(yīng)著不同的箱子
cats2結(jié)果:
array([0, 0, 0, 1, 0, 0, 2, 1, 3, 2, 2, 1], dtype=int64) pd.value_counts(cats1) # 對(duì)不同箱子中的數(shù)進(jìn)行計(jì)數(shù)
計(jì)數(shù)結(jié)果:
(18, 25] 5 (35, 60] 3 (25, 35] 3 (60, 100] 1 dtype: int64 pd.cut(ages, [18, 26, 36, 61, 100], right=False) # 指定分箱區(qū)間是左閉右開
改變區(qū)間開閉結(jié)果:
[[18, 26), [18, 26), [18, 26), [26, 36), [18, 26), ..., [26, 36), [61, 100), [36, 61), [36, 61), [26, 36)] Length: 12 Categories (4, interval[int64]): [[18, 26) < [26, 36) < [36, 61) < [61, 100)] # 可以將想要指定給不同箱子的標(biāo)簽傳遞給labels參數(shù) group_names = ['Youth', 'YoungAdult', 'MiddleAged', 'Senior'] cuts3 = pd.cut(ages, bins, labels=group_names) cuts3
cats3結(jié)果:
[Youth, Youth, Youth, YoungAdult, Youth, ..., YoungAdult, Senior, MiddleAged, MiddleAged, YoungAdult] Length: 12 Categories (4, object): [Youth < YoungAdult < MiddleAged < Senior]
pandas.qcut函數(shù):
qcats1 = pd.qcut(ages,q=4) # 參數(shù)q指定所分箱子的數(shù)量 qcats1
qcats1結(jié)果:
[(19.999, 22.75], (19.999, 22.75], (22.75, 29.0], (22.75, 29.0], (19.999, 22.75], ..., (29.0, 38.0], (38.0, 61.0], (38.0, 61.0], (38.0, 61.0], (29.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() # 從輸出結(jié)果可以看到每個(gè)箱子中的數(shù)據(jù)量時(shí)相同的
計(jì)數(shù)結(jié)果:
(19.999, 22.75] 3 (22.75, 29.0] 3 (29.0, 38.0] 3 (38.0, 61.0] 3 dtype: int64
參考:《利用Python進(jìn)行數(shù)據(jù)分析》——Wes McKinney 第二版
以上這篇使用pandas實(shí)現(xiàn)連續(xù)數(shù)據(jù)的離散化處理方式(分箱操作)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python操作PDF文件之實(shí)現(xiàn)A3頁面轉(zhuǎn)A4
這篇文章主要為大家詳細(xì)介紹了Python操作PDF文件之實(shí)現(xiàn)A3頁面轉(zhuǎn)A4功能的相關(guān)資料,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-11-11Python 異步之如何保護(hù)任務(wù)免于取消詳解
這篇文章主要為大家介紹了Python 異步之如何保護(hù)任務(wù)免于取消示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03解決pycharm py文件運(yùn)行后停止按鈕變成了灰色的問題
今天小編就為大家分享一篇解決pycharm py文件運(yùn)行后停止按鈕變成了灰色的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-11-11python OpenCV的imread不能讀取中文路徑問題及解決
這篇文章主要介紹了python OpenCV的imread不能讀取中文路徑問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07簡單了解Django ORM常用字段類型及參數(shù)配置
這篇文章主要介紹了簡單了解Django ORM常用字段類型及參數(shù)配置,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01詳解Python使用simplejson模塊解析JSON的方法
這篇文章主要介紹了Python使用simplejson模塊解析JSON的方法,實(shí)例代碼基于Pyhton2.x版本,文中最后還附了關(guān)于simplejson模塊的一些性能放面的討論,需要的朋友可以參考下2016-03-03Python使用asyncio.Queue進(jìn)行任務(wù)調(diào)度的實(shí)現(xiàn)
本文主要介紹了Python使用asyncio.Queue進(jìn)行任務(wù)調(diào)度的實(shí)現(xiàn),它可以用于任務(wù)調(diào)度和數(shù)據(jù)交換,文中通過示例代碼介紹的非常詳細(xì),感興趣的可以了解一下2024-02-02