理解Python數(shù)據(jù)離散化手寫if-elif語句與pandas中cut()方法實(shí)現(xiàn)
正文
當(dāng)我們進(jìn)行數(shù)據(jù)分析時(shí),有時(shí)候需要對(duì)數(shù)值型數(shù)據(jù)進(jìn)行離散化,將其劃分為不同的標(biāo)簽或類別。這樣做可以方便我們進(jìn)行統(tǒng)計(jì)和分析,并幫助我們更好地理解數(shù)據(jù)。
在本文中,我們將介紹兩種常見的離散化方法,并提供實(shí)現(xiàn)代碼。
方法一:使用條件語句
第一種方法是使用條件語句來顯式地檢查輸入值 x 是否在每個(gè)區(qū)間內(nèi),并返回相應(yīng)的標(biāo)簽。這種方法適用于自定義的分段方式,要求手動(dòng)設(shè)置每個(gè)閾值和對(duì)應(yīng)的標(biāo)簽。
下面是一個(gè)示例函數(shù) transfor_num 的實(shí)現(xiàn)代碼:
def transfor_num(x): if x ==0: label = '無交易' elif 0 < x <=0.01: label = '0-0.01' elif 0.01 < x <=0.04: label = '0.01-0.04' elif 0.04 < x <=0.09: label = '0.04-0.09' elif 0.09 < x <=0.49: label = '0.09-0.49' elif 0.49 < x <=0.99: label = '0.49-0.99' elif 0.99 < x <=4.99: label = '0.99-4.99' elif 4.99 < x <=9.99: label = '4.99-9.99' elif 9.99 < x <=19.99: label = '9.99-19.99' elif 19.99 < x <=49.99: label = '19.99-49.99' elif 49.99 < x <=99.99: label = '49.99-99.99' elif x > 99.99 : label = '100及以上' return label # 你可以通過調(diào)用 transfor_num(x) 函數(shù)并將所需的值傳遞給 x 參數(shù)來使用該函數(shù)。例如: label = transfor_num(5.67) print(label)
輸出結(jié)果應(yīng)該是 '0.01-0.04',因?yàn)?5.67 在指定的區(qū)間范圍內(nèi)。
方法二:使用 pd.cut() 方法
第二種方法是使用 pandas 庫的 cut() 方法將輸入值 x 映射到不同的標(biāo)簽中,并返回標(biāo)簽。這種方法更加簡(jiǎn)潔和易于使用,同時(shí)也可以通過調(diào)整 bins 參數(shù)來靈活地控制分段的方式和結(jié)果。
下面是一個(gè)示例函數(shù) transfor_num1 的實(shí)現(xiàn)代碼:
def transfor_num1(x): bins = [-1,0, 0.01, 0.04, 0.09, 0.49, 0.99, 4.99, 9.99, 19.99, 49.99, 99.99, float('inf')] labels = [ '無交易','0-0.01', '0.01-0.04', '0.04-0.09', '0.09-0.49', '0.49-0.99', '0.99-4.99', '4.99-9.99', '9.99-19.99', '19.99-49.99', '49.99-99.99', '100及以上'] return pd.cut(x, bins=bins, labels=labels)
你可以通過調(diào)用 transfor_num1(x) 函數(shù)并將所需的值傳遞給 x 參數(shù)來使用該函數(shù)。例如:
import pandas as pd data = {'transaction': [0, 0.005, 0.0125, 0.044, 0.067, 0.55, 2.99, 8.75, 15.6, 30.25, 80.5, 150]} df = pd.DataFrame(data) df['tran_amount_label'] = transfor_num1(df['transaction']) print(df) # 輸出結(jié)果將會(huì)是如下數(shù)據(jù)框的形式: transaction tran_amount_label 0 0.00000 無交易 1 0.00500 0-0.01 2 0.01250 0.01-0.04 3 0.04400 0.01-0.04 4 0.06700 0.04-0.09 5 0.55000 0.49-0.99 6 2.99000 0.99-4.99 7 8.75000 4.99-9.99 8 15.60000 9.99-19.99 9 30.25000 19.99-49.99 10 80.50000 49.99-99.99 11 150.00000 100及以上
其中 tran_amount_label 是新添加的一列,它顯示了每個(gè)交易額所屬的標(biāo)簽和類別。
兩種方法各有優(yōu)缺點(diǎn)。使用條件語句需要手動(dòng)設(shè)置閾值和對(duì)應(yīng)的標(biāo)簽,比較繁瑣;而使用 pd.cut() 方法則可以自動(dòng)劃分區(qū)間,但其不太靈活。因此,在具體使用時(shí),需要根據(jù)實(shí)際情況進(jìn)行選擇。
希望本文能夠幫助你更好地理解離散化的概念和實(shí)現(xiàn)方法,更多關(guān)于Python數(shù)據(jù)離散化的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python存儲(chǔ)json數(shù)據(jù)發(fā)生亂碼的解決方法
當(dāng)使用json.dump()把python對(duì)象轉(zhuǎn)換為json后存儲(chǔ)到文件中時(shí),文件可能會(huì)出現(xiàn)亂碼的問題,本篇文章可以幫助您解決亂碼問題,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-09-09Python?xpath,JsonPath,bs4的基本使用
這篇文章主要介紹了Python?xpath,JsonPath,bs4的基本使用,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下2022-07-07Pandas數(shù)據(jù)類型自行變換及數(shù)據(jù)類型轉(zhuǎn)換失敗問題分析與解決
這篇文章主要介紹了Pandas數(shù)據(jù)類型自行變換及數(shù)據(jù)類型轉(zhuǎn)換失敗問題分析與解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06python 讀取dicom文件,生成info.txt和raw文件的方法
今天小編就為大家分享一篇python 讀取dicom文件,生成info.txt和raw文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-01-01