如何使用 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() 方法將資料劃分為分位數或百分位數。這兩個函式還可以為每個區間或分位數分配標籤,這有助於將數值資料轉換為分類資料。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP