理解Python數(shù)據(jù)離散化手寫if-elif語句與pandas中cut()方法實(shí)現(xiàn)
正文
當(dāng)我們進(jìn)行數(shù)據(jù)分析時(shí),有時(shí)候需要對數(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)簽。這種方法適用于自定義的分段方式,要求手動設(shè)置每個(gè)閾值和對應(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)簽。這種方法更加簡潔和易于使用,同時(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é)果將會是如下數(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)。使用條件語句需要手動設(shè)置閾值和對應(yīng)的標(biāo)簽,比較繁瑣;而使用 pd.cut() 方法則可以自動劃分區(qū)間,但其不太靈活。因此,在具體使用時(shí),需要根據(jù)實(shí)際情況進(jìn)行選擇。
希望本文能夠幫助你更好地理解離散化的概念和實(shí)現(xiàn)方法,更多關(guān)于Python數(shù)據(jù)離散化的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python存儲json數(shù)據(jù)發(fā)生亂碼的解決方法
當(dāng)使用json.dump()把python對象轉(zhuǎn)換為json后存儲到文件中時(shí),文件可能會出現(xiàn)亂碼的問題,本篇文章可以幫助您解決亂碼問題,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-09-09
Python?xpath,JsonPath,bs4的基本使用
這篇文章主要介紹了Python?xpath,JsonPath,bs4的基本使用,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下2022-07-07
Pandas數(shù)據(jù)類型自行變換及數(shù)據(jù)類型轉(zhuǎn)換失敗問題分析與解決
這篇文章主要介紹了Pandas數(shù)據(jù)類型自行變換及數(shù)據(jù)類型轉(zhuǎn)換失敗問題分析與解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06
python 讀取dicom文件,生成info.txt和raw文件的方法
今天小編就為大家分享一篇python 讀取dicom文件,生成info.txt和raw文件的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01

