Fonction Pandas pd.cut()
pd.cut()est utilisée dans la bibliothèque Pandas pourdiscrétiser des données continues (Binning)fonction. Elle divise les données numériques en catégories discrètes selon des intervalles spécifiés, et est très adaptée aux statistiques groupées et à la visualisation dans l'analyse de données.
Les opérations de discrétisation sont très courantes dans l'analyse de données, comme diviser les âges en "adolescent", "d'âge moyen", "personne âgée", ou diviser les scores en "échec", "passable", "bien", "excellent", etc.
Signification du mot: cutCela signifie "cut". Ici, il s'agit de "découper" un intervalle de données continues en plusieurs intervalles discrets.
Syntaxe de base et paramètres
pd.cut()est une fonction de premier niveau de la bibliothèque Pandas, utilisée pour discrétiser des variables continues.
Format de syntaxe
pd.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False)
Description du paramètre
- Paramètre:
x- Type : objet de type tableau, tel qu'une liste, une Series, un array, etc.
- Description : les données numériques continues à regrouper en intervalles.
- Paramètre:
bins- Type : entier, scalaire (limites d'intervalle) ou IntervalIndex.
- Description : la méthode de découpage en intervalles. Elle peut être un entier (indiquant en combien d'intervalles de largeur égale découper) ou une liste (spécifiant des limites d'intervalle précises).
- Paramètre:
right- Type : valeur booléenne.
- Description : indique s'il faut utiliser des intervalles fermés à droite. La valeur par défaut est
True(c'est-à-dire sous la forme [a, b]). Si défini surFalse, alors il s'agit d'un intervalle fermé à gauche et ouvert à droite (a, b].
- Paramètre:
labels- Type : tableau ou None.
- Description : spécifie des libellés personnalisés pour chaque intervalle. Si non spécifié, des représentations d'intervalle telles que "(0, 10]" sont utilisées.
- Paramètre:
retbins- Type : valeur booléenne.
- Description : Si
True, le résultat renvoyé contiendra les limites d'intervalle. La valeur par défaut estFalse。
- Paramètre:
include_lowest- Type : valeur booléenne.
- Description : Si
True, le premier intervalle contient la borne gauche. La valeur par défaut estFalse。
Description de la fonction
- Valeur de retour: Renvoie une Series de type Categorical, où chaque valeur correspond à l'intervalle auquel elle appartient.
- Effet: Associe des valeurs numériques continues à des catégories discrètes (intervalles).
Exemple
Maîtrisons à fond, à travers une série d'exemples du simple au complexe,pd.cut()l'utilisation.
Exemple 1 : Utilisation de base — Discrétisation à largeur égale
Exemple
import numpy as np
# 1. Créer des données numériques
scores = pd.Series([55, 70, 82, 45, 90, 65, 78, 88, 92, 58])
print("=== Scores originaux ===")
print(scores)
# 2. Diviser les scores en 3 intervalles de largeur égale
result = pd.cut(scores, bins=3)
print("\n=== pd.cut(scores, bins=3) discrétisation à largeur égale ===)
print(result)
# 3. Afficher les bornes des intervalles
result_bins = pd.cut(scores, bins=3, retbins=True)
print("\n=== Renvoyer les limites des intervalles ===)
print(f"Limites des intervalles : {result_bins)
Sortie attendue :
=== 原始分数 === 0 55 1 70 2 82 3 45 4 90 5 65 6 78 7 88 8 92 9 58 === pd.cut(scores, bins=3) 等宽分箱 === 0 (44.667, 60.667] 1 (60.667, 76.333] 2 (76.333, 92.0] 3 (44.667, 60.667] 4 (76.333, 92.0] 5 (60.667, 76.333] 6 (60.667, 76.333] 7 (76.333, 92.0] 8 (76.333, 92.0] 9 (44.667, 60.667] dtype: category Categories (3, interval[float64]): [(44.667, 60.667] < (60.667, 76.333] < (76.333, 92.0] === 返回分箱边界 === 分箱边界: [44.667 60.667 76.333 92. ]
Explication du code :
bins=3Indique que les données sont automatiquement divisées en 3 intervalles de largeur égale.- Pandas calcule automatiquement les limites des intervalles en fonction des valeurs minimale et maximale des données.
- La valeur renvoyée est de type Categorical, et chaque valeur est un objet Interval.
- Par défaut, des intervalles fermés à droite sont utilisés, c'est-à-dire de la forme (a, b].
Exemple 2 : Limites d'intervalles personnalisées
Dans les applications pratiques, nous devons souvent personnaliser les limites des intervalles en fonction des besoins métier.
Exemple
import numpy as np
# Créer des données de score
scores = pd.Series([55, 70, 82, 45, 90, 65, 78, 88, 92, 58, 73, 67, 81, 49, 95])
# Limites d'intervalles personnalisées : Fail, Pass, Good, Excellent
bins = [0, 60, 75, 90, 100]
labels = ['Fail', 'Pass', 'Good', 'Excellent']
result = pd.cut(scores, bins=bins, labels=labels, include_lowest=True)
print("=== Scores originaux ===")
print(scores.values)
print("\n=== Résultat du binning ===)
print(result)
# Compter le nombre de personnes dans chaque tranche de notes
print("\n=== Statistiques de distribution des scores ===)
print(result.value_counts().sort_index())
Sortie attendue :
=== 原始成绩 [55 70 82 45 90 65 78 88 92 58 73 67 81 49 95] === 分箱结果 0 及格 1 良好 2 良好 3 不及格 4 优秀 ... 12 良好 13 不及格 14 优秀 dtype: category Categories (4, interval[int64]): [不及格 < 及格 < 良好 < 优秀] === 成绩分布统计 不及格 3 及格 4 良好 5 优秀 3 dtype: int64
Explication du code :
bins=[0, 60, 75, 90, 100]4 intervalles définis : [0-60], (60-75], (75-90], (90-100]labelsLe paramètre labels spécifie des libellés chinois intuitifs pour chaque intervalleinclude_lowest=TrueVeiller à ce que le premier intervalle contienne la borne gauche 0value_counts()Permet de compter facilement le nombre de personnes dans chaque tranche de notes
Exemple 3 : Utilisation d'intervalles fermés à droite/fermés à gauche
Exemple
import numpy as np
# Données de test
data = pd.Series([10, 20, 30, 40, 50])
# Intervalle fermé à droite par défaut [a, b]
result1 = pd.cut(data, bins=4)
print("=== Intervalle fermé à droite par défaut [a, b] ===")
print(result1)
# Intervalle fermé à gauche et ouvert à droite (a, b]
result2 = pd.cut(data, bins=4, right=False)
print("\n=== Intervalle fermé à gauche et ouvert à droite (a, b] ===)
print(result2)
Sortie attendue :
=== 默认右闭区间 [a, b] 0 (7.5, 17.5] 1 (17.5, 27.5] 2 (27.5, 37.5] 3 (37.5, 47.5] 4 (47.5, 57.5] dtype: category === 左闭右开区间 (a, b] 0 [10, 17.5) 1 [17.5, 27.5) 2 [27.5, 37.5) 3 [37.5, 47.5) 4 [47.5, 57.5) dtype: category
Explication du code :
- Par défaut, l'intervalle fermé à droite est utilisé
[a, b], c'est-à-dire qu'il inclut la borne droite - Set
right=Falsepour passer à un intervalle fermé à gauche et ouvert à droite[a, b) - Le mode ouvert/fermé de l'intervalle affecte la classification des valeurs aux bornes.
Notes
Remarques importantes :
- S'il y a des valeurs dans les données qui dépassent
binsla plage spécifiée, NaN sera produitNaNbinsles bornes doivent être croissantes de manière monotone- Lors de l'utilisation d'étiquettes personnalisées, le nombre d'étiquettes doit être égal au nombre de limites moins un.
- Le résultat après découpage en intervalles est de type Categorical et peut être traité à l'aide de méthodes de chaîne.
Autres extensions
Fonctions courantes de Pandas