Fonction pd.value_counts() de Pandas

Pandas 通用函数Fonctions courantes de Pandas


pd.value_counts()est une fonction de la bibliothèque Pandas utilisée pourcompter la fréquence de chaque valeur. Elle calcule le nombre d'occurrences de chaque valeur unique dans le tableau et les renvoie triées par fréquence par ordre décroissant.

Il s'agit de l'une des fonctions les plus couramment utilisées dans l'analyse de données catégorielles, permettant de comprendre rapidement la distribution des données, comme le comptage des résultats de vote, la répartition des catégories de produits, etc.

Signification du mot: value_countsCela signifie « compter les valeurs », c'est-à-dire compter le nombre d'occurrences de chaque valeur.


Syntaxe de base et paramètres

pd.value_counts()Il s'agit d'une fonction de premier niveau de la bibliothèque Pandas, utilisée pour calculer la fréquence de chaque valeur unique.

Format de syntaxe

pd.value_counts(values, sort=True, ascending=False, normalize=False, bins=None, dropna=True)

Description du paramètre

  • Paramètre: values
    • Type : Series, objet de type tableau.
    • Description : Les données dont les fréquences doivent être comptées. Généralement une Series.
  • Paramètre: sort
    • Type : booléen.
    • Indique s'il faut trier par fréquence. La valeur par défaut estTrue(ordre décroissant par fréquence).
  • Paramètre: ascending
    • Type : booléen.
    • SiTrue, trier par fréquence par ordre croissant ; siFalse(par défaut), trier par fréquence par ordre décroissant.
  • Paramètre: normalize
    • Type : booléen.
    • SiTrue, renvoie la proportion de chaque valeur (entre 0 et 1) au lieu de la fréquence absolue. Valeur par défaut :False。
  • Paramètre: bins
    • Type : Integer ou None.
    • Si un entier est spécifié, les données numériques sont regroupées en intervalles et les fréquences sont comptées (similaire à un histogramme). Non applicable aux données catégorielles.
  • Paramètre: dropna
    • Type : booléen.
    • Indique si les NaN doivent être inclus dans les résultats statistiques. Valeur par défaut :True(non inclus).
  • Description de la fonction

    • Valeur de retour: Renvoie une Series où l’index correspond aux valeurs uniques et les valeurs correspondent aux fréquences (ou proportions).
    • Effet: Compte et affiche le nombre d’occurrences de chaque valeur unique.

    Exemples

    Maîtrisons parfaitementpd.value_counts()l'utilisation de.

    Exemple 1 : Utilisation de base - Compter les fréquences de données catégorielles

    Exemple

    import pandas as pd
    import numpy as np

    # 1. Créer une Series contenant des valeurs en double
    colors = pd.Series(['red', 'blue', 'green', 'red', 'blue', 'yellow', 'red', 'blue', 'blue'])

    print("=== Série originale ===")
    print(colors)

    # 2. Utiliser pd.value_counts() pour compter les fréquences
    result = pd.value_counts(colors)
    print("\n=== pd.value_counts() statistiques de fréquence ===")
    print(result)

    Sortie attendue :

    === 原始 Series ===
    0       red
    1      blue
    2     green
    3       red
    4     blue
    5     yellow
    6       red
    7      blue
    8       blue
    dtype: object
    
    === pd.value_counts() 频次统计 ===
    blue      4
    red       3
    green     1
    yellow    1
    dtype: int64
    

    Explication du code :

    1. Les résultats sont triés par ordre décroissant de fréquence ; le bleu apparaît le plus souvent (4 fois), le rouge vient ensuite (3 fois), et le vert et le jaune apparaissent chacun 1 fois.
    2. Ce qui est renvoyé est une Series, avec les valeurs de couleur comme index et les effectifs comme valeurs.

    Exemple 2 : Utilisation du paramètre normalize pour calculer des proportions

    normalize=TrueLes fréquences peuvent être converties en proportions, ce qui facilite la visualisation de la répartition relative des données.

    Exemple

    import pandas as pd
    import numpy as np

    # Créer des données de vote
    votes = pd.Series(['A', 'B', 'A', 'C', 'A', 'B', 'A', 'A', 'C', 'B', 'A', 'B'])

    print("=== Données de vote ===")
    print(votes)

    # 1. Fréquence absolue
    print("\n=== Fréquence absolue ===")
    print(pd.value_counts(votes))

    # 2. Proportions relatives (normalize=True)
    print("\n=== Proportions relatives ===")
    result_normalized = pd.value_counts(votes, normalize=True)
    print(result_normalized)
    print(f"\nSomme des proportions : {result_normalized.sum():.2f}")

    # 3. Trier par ordre croissant
    print("\n=== Trié par ordre croissant ===")
    print(pd.value_counts(votes, ascending=True))

    Sortie attendue :

    === 投票数据 ===
    0        A
    1        B
    2        A
    3        C
    4        A
    5        B
    值 'A' 出现 6 次,占 50%
    值 'B' 出现 4 次,约 33.3%
    值 'C' 出现 2 次,约 16.7%
    
    === 相对比例 ===
    A    0.500000
    B    0.333333
    C    0.166667
    dtype: float64
    
    === 升序排列 ===
    C    2
    B    4
    A    6
    dtype: int64
    

    Explication du code :

    • Utilisationnormalize=Truepermet de calculer rapidement la proportion de chaque catégorie.
    • Toutes les proportions totalisent 1.0, ce qui facilite l'analyse des proportions.
    • Utilisationascending=Truepermet de visualiser les résultats par ordre croissant de fréquence.

    Exemple 3 : Gestion des données numériques et utilisation du paramètre bins

    Pour des valeurs numériques continues, vous pouvez utiliser lebinsparamètre pour effectuer des statistiques de regroupement.

    Exemple

    import pandas as pd
    import numpy as np

    # 1. Créer des données numériques
    scores = pd.Series([85, 90, 78, 92, 88, 76, 95, 82, 70, 89, 91, 77, 84, 86])

    print("=== Notes des étudiants ===")
    print(scores)

    # 2. Sans regroupement - compter chaque valeur unique
    print("\n=== Compter chaque note ===")
    print(pd.value_counts(scores))

    # 3. Utiliser le paramètre bins pour le regroupement
    print("\n=== Divisé en 4 bins ===")
    result_bins = pd.value_counts(scores, bins=4)
    print(result_bins)

    # 4. Afficher les bornes des intervalles
    print("\n=== Bornes des intervalles ===")
    print(f"Valeur min : {scores.min()}, Valeur max : {scores.max()}")

    Sortie attendue :

    === 学生成绩 ===
    [85, 90, 78, 92, 88, 76, 95, 82, 70, 89, 91, 77, 84, 86]
    
    === 统计每个分数 ===
    85    2
    90    1
    78    1
    92    1
    88    1
    76    1
    95    1
    82    1
    70    1
    89    1
    91    1
    77    1
    84    1
    86    1
    Name: count, dtype: int64
    
    === 分成 4 个箱 ===
      result_bins = pd.value_counts(scores, bins=4)
    (88.75, 95.0]                 5
    (82.5, 88.75]                 4
    (76.25, 82.5]                 3
    (69.97399999999999, 76.25]    2
    Name: count, dtype: int64
    
    === 分箱边界 ===
    最小值: 70, 最大值: 95
    

    Ceci est similaire à un histogramme, montrant que la distribution des scores est principalement concentrée dans la fourchette moyenne à élevée. Le paramètre bins divise les données numériques en intervalles discrets par plage, puis compte la quantité de données dans chaque intervalle.

    Exemple 4 : Gestion des valeurs manquantes

    En utilisant ladropnale paramètre contrôle si les valeurs manquantes sont comptées.

    Exemple

    import pandas as pd
    import numpy as np

    # 1. Données contenant des valeurs manquantes
    data = pd.Series(['a', 'b', np.nan, 'a', None, 'c', np.nan, 'b', 'a'])

    print("=== Données contenant des valeurs manquantes ===")
    print(data)

    # 2. NaN n'est pas inclus par défaut (dropna=True)
    print("\n=== NaN non inclus par défaut ===")
    print(pd.value_counts(data))

    # 3. Inclure NaN (dropna=False)
    print("\n=== Inclure NaN ===")
    print(pd.value_counts(data, dropna=False))

    # 4. Compter les valeurs manquantes pour les données numériques
    numeric_data = pd.Series([1, 2, np.nan, 3, 2, np.nan, 1, 4])
    print("\n=== Données numériques contenant NaN ===")
    print(pd.value_counts(numeric_data, dropna=False))

    Sortie attendue :

    === 包含缺失值的数据 ===
    0       a
    1       b
    2     NaN
    3       a
    4    None
    5       c
    6     NaN
    7       b
    8       a
    dtype: object
    
    === 默认不包含 NaN ===
    a    3
    b    2
    c    1
    dtype: 64
    
    === 包含 NaN (dropna=False) ===
    a       3
    b       2
    NaN     2  # 2 个 NaN (2 个 np.nan)
    c       1
    dtype: int64
    
    === 数值型数据包含 NaN ===
    1.0    2
    2.0    2
    NaN    2  # 2 个 NaN
    3.0    1
    4.0    1
    dtype: int64
    

    Explication du code :

    • Par défaut (dropna=True), les valeurs NaN ne sont pas comptées.
    • Utilisationdropna=Falsevous permet de visualiser le nombre de valeurs manquantes, ce qui est utile dans l'analyse de la qualité des données.
    • Cela s'applique également aux données numériques.

    Astuce : pd.value_counts()Il s'agit de l'une des fonctions les plus importantes de l'analyse exploratoire des données, vous permettant de comprendre rapidement la distribution des données. Si vous avez seulement besoin d'obtenir une liste de valeurs uniques sans fréquences, utilisez lapd.unique()fonction.

    Pandas 常用函数Fonctions courantes de Pandas

    Autres extensions