Fonction Pandas pd.cut()

Pandas 通用函数Fonctions courantes de Pandas


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 estTrue(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 : SiTrue, le résultat renvoyé contiendra les limites d'intervalle. La valeur par défaut estFalse。
  • Paramètre: include_lowest
    • Type : valeur booléenne.
    • Description : SiTrue, 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 pandas as pd
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 :

  1. bins=3Indique que les données sont automatiquement divisées en 3 intervalles de largeur égale.
  2. Pandas calcule automatiquement les limites des intervalles en fonction des valeurs minimale et maximale des données.
  3. La valeur renvoyée est de type Categorical, et chaque valeur est un objet Interval.
  4. 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 pandas as pd
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 intervalle
  • include_lowest=TrueVeiller à ce que le premier intervalle contienne la borne gauche 0
  • value_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 pandas as pd
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
  • Setright=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épassentbinsla plage spécifiée, NaN sera produitNaN
  • binsles 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.

Python math 模块Fonctions courantes de Pandas

Autres extensions