python-pandas.cut()數據分箱


在對數據處理的過程中,經常會用到對不同閾值的數據貼上不同的標簽,或者將連續數據轉換成分類數據,pandas中的cut函數可以較好解決數據划分不同標簽問題。

pandas.cut函數語法:

pandas.cut(x, 
        bins, 
        right=True, 
        labels=None, 
        retbins=False, 
        precision=3, 
        include_lowest=False, 
        duplicates='raise', 
        ordered=True
        )

參數解釋:

x : 要進行分割的一維數組。

bins :整數,標量序列或者間隔索引,是進行分組的依據。

- 如果填入整數n,則表示將x中的數值分成等寬的n份(即每一組內的最大值與最小值之差約相等);
- 如果是標量序列,序列中的數值表示用來分檔的分界值
- 如果是間隔索引,“ bins”的間隔索引必須不重疊

right:布爾值,默認為True表示包含最右側的數值。

- 當right = True(默認值)時,則bins=[1、2、3、4]表示(1,2],(2,3],(3,4]
- 當bins是一個間隔索引時,該參數被忽略。

labels : 數組或布爾值,可選.指定分箱的標簽。

- 如果是數組,長度要與分箱個數一致,比如bins=[1、2、3、4]表示(1,2],(2,3],(3,4]一共3個區間,則labels的長度也就是標簽的個數也要是3
- 如果為False,則僅返回分箱的整數指示符,即x中的數據在第幾個箱子里。

當bins是間隔索引時,將忽略此參數

retbins:是否顯示分箱的分界值。默認為False,當bins取整數時可以設置retbins=True以顯示分界值,得到划分后的區間

precision:整數,默認3,存儲和顯示分箱標簽的精度。

include_lowest:布爾值,表示區間的左邊是開還是閉,默認為false,也就是不包含區間左邊。

duplicates:如果分箱臨界值不唯一,則引發ValueError或丟棄非唯一。

栗子:

import numpy as np
import pandas as pd

分割成等寬的n等分,bins=n

x = np.array([1, 7, 5, 4, 6, 3])
pd.cut(x, bins=3)

分割等寬n等分並指定標簽

x = np.array([1, 7, 5, 4, 6, 3])
pd.cut(x, bins=3, labels=["bad", "medium", "good"])

只返回bin,設置labels=False

x = np.array([1, 7, 5, 4, 6, 3])
pd.cut(x, bins=3, labels=False)


結果表示數字1在第0號箱子,數字7在第2號箱子....

顯示分界值,retbins=True

bins傳入間隔索引

s = pd.Series(np.array([2, 4, 6, 8, 10]),
             index=['a', 'b','c', 'd', 'e'])
pd.cut(s, bins=[0, 2, 4, 6, 8, 10], labels=False, retbins=True, right=False) # 不設置標簽,顯示分界值,不含最右側值

bins傳入間隔索引存在重復數據
s = pd.Series(np.array([2, 4, 6, 8, 10]),
             index=['a', 'b','c', 'd', 'e'])
pd.cut(s, bins=[0, 2, 4, 6, 10, 10], labels=False, retbins=True, right=False
      , duplicates='drop') # 不設置標簽,顯示分界值,不含最右側值



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM