如何使用 Pandas cut() 和 qcut()?


Pandas 是一個用於結構化資料操作和分析的 Python 庫。Pandas 的 cut() 和 qcut() 方法用於根據數值資料建立分類變數。cut() 和 qcut() 方法分別將數值資料分割成離散的區間或分位數,併為每個區間或分位數分配標籤。在本文中,我們將透過各種示例來了解 cut() 和 qcut() 方法的功能。

cut() 函式

cut() 函式根據指定的標準將連續變數劃分為離散的箱或區間。它根據輸入資料中存在的數值範圍建立資料組或類別。

語法

pandas.cut(x, bins, labels=None, right=True, include_lowest=False, ...)

上面語法中使用的引數是:

  • x: 輸入資料,可以是 Pandas Series 或 NumPy 陣列。

  • bins: 可以是指定要建立的等寬箱數的整數,或者是一系列標量值,用於定義箱的邊緣。如果提供整數,則 x 中的值範圍將被劃分為這麼多等寬的箱。

  • labels (可選): 要分配給每個箱的標籤的類似陣列的物件。如果未提供,則標籤將是指示箱索引的整數。

  • right (可選): 一個布林值,指示區間應為右閉合(包含右箱邊緣)還是左閉合(包含左箱邊緣)。預設設定為 True。

  • include_lowest (可選): 一個布林值,指示是否包含區間的最低值。預設設定為 False。

示例 1:等寬箱

在下面的示例中,我們有一系列數值資料。我們將 bins 指定為 3,表示我們想將資料劃分為三個等寬的箱。輸出顯示每個值所屬的區間以及相應的類別。

import pandas as pd

# Example 1: Equal-width bins
data = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
bins = 3
categories = pd.cut(data, bins)
print(categories)

輸出

[(9.91, 40.0], (9.91, 40.0], (9.91, 40.0], (9.91, 40.0], (40.0, 70.0], (40.0, 70.0], (40.0, 70.0], (70.0, 100.0], (70.0, 100.0], (70.0, 100.0]]
Categories (3, interval[float64, right]): [(9.91, 40.0] < (40.0, 70.0] < (70.0, 100.0]]

示例 2:自定義箱邊緣和標籤

在下面的示例中,我們定義自定義箱邊緣 [0, 30, 60, 100] 和相應的標籤 ['低', '中', '高']。cut() 函式根據提供的箱和標籤將資料中的每個值分配到相應的類別。

# Example 2: Custom bin edges and labels
import pandas as pd
data = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
bins = [0, 30, 60, 100]
labels = ['Low', 'Medium', 'High']
categories = pd.cut(data, bins, labels=labels)
print(categories)

輸出

['Low', 'Low', 'Low', 'Medium', 'Medium', 'Medium', 'High', 'High', 'High', 'High']
Categories (3, object): ['Low' < 'Medium' < 'High']

qcut() 函式

與 cut() 函式將資料分成等寬區間不同,qcut() 函式根據分位數或百分位數劃分資料。每個箱中資料點的數量相等,這使得它對於建立均勻分佈的組非常有用。

語法

pandas.qcut(x, q, labels=None, retbins=False, precision=3, duplicates='raise')

語法中使用的引數是:

  • x: 輸入資料,可以是 Pandas Series 或 NumPy 陣列。

  • q: 指定要建立的分位數個數的整數,或一系列分位數(0 到 1 之間的值),用於定義截止點。

  • labels (可選): 要分配給每個箱的標籤的類似陣列的物件。如果未提供,則標籤將是指示箱索引的整數。

  • retbins (可選): 一個布林值,指示是否與類別一起返回箱邊緣。預設設定為 False。

  • precision (可選): 指定分位數精度值的整數。預設設定為 3。

  • duplicates (可選): 如何處理重複值。預設設定為 'raise',這將引發錯誤。

示例 1:相同數量的分位數

在下面的示例中,我們與之前一樣擁有數值資料。透過將分位數指定為 3,我們將資料劃分為三個大小相等的分位數。輸出顯示每個值所屬的區間以及相應的類別。

import pandas as pd

# Example 1: Equal number of quantiles
data = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
quantiles = 3
categories = pd.qcut(data, quantiles)
print(categories)

輸出

[(9.999, 40.0], (9.999, 40.0], (9.999, 40.0], (9.999, 40.0], (40.0, 70.0], (40.0, 70.0], (40.0, 70.0], (70.0, 100.0], (70.0, 100.0], (70.0, 100.0]]
Categories (3, interval[float64, right]): [(9.999, 40.0] < (40.0, 70.0] < (70.0, 100.0]]

示例 2:自定義分位數和標籤

在下面的示例中,我們定義自定義分位數 [0, 0.3, 0.6, 1] 和相應的標籤 ['低', '中', '高']。qcut() 函式根據提供的分位數和標籤將每個值分配到相應的類別。

import pandas as pd

# Example 2: Custom quantiles and labels
data = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
quantiles = [0, 0.3, 0.6, 1]
labels = ['Low', 'Medium', 'High']
categories = pd.qcut(data, quantiles, labels=labels)
print(categories)

輸出

['Low', 'Low', 'Low', 'Medium', 'Medium', 'Medium', 'High', 'High', 'High', 'High']
Categories (3, object): ['Low' < 'Medium' < 'High']

結論

在本文中,我們討論瞭如何使用 pandas cut() 和 qcut() 方法根據數值資料建立分類變數。cut() 函式根據給定條件將資料劃分為離散區間,而 qcut() 方法將資料劃分為分位數或百分位數。這兩個函式還可以為每個區間或分位數分配標籤,這有助於將數值資料轉換為分類資料。

更新於:2023年10月13日

909 次檢視

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.