Función Pandas pd.value_counts()

Pandas 通用函数Funciones comunes de Pandas


pd.value_counts()es la función de la biblioteca Pandas utilizada paracontar la frecuencia de aparición de cada valor.La función calcula el número de veces que aparece cada valor único en el array y lo devuelve ordenado de forma descendente por frecuencia.

Es una de las funciones más utilizadas en el análisis de datos categóricos. Permite comprender rápidamente la distribución de los datos, por ejemplo, contar resultados de votaciones, distribución de categorías de productos, etc.

Definición de términos: value_countsSignifica "contar valores", es decir, contar el número de veces que aparece cada valor.


Sintaxis básica y parámetros

pd.value_counts()Es una función de nivel superior de la biblioteca Pandas que se utiliza para calcular la frecuencia de cada valor único.

Formato de sintaxis

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

Descripción de parámetros

  • Parámetro: values
    • Tipo: Series, objeto similar a un array.
    • Descripción: Los datos cuya frecuencia se va a contar. Normalmente es una Series.
  • Parámetro: sort
    • Tipo: Booleano.
    • Si se ordena por frecuencia. El valor por defecto esTrue(orden descendente por frecuencia).
  • Parámetro: ascending
    • Tipo: Booleano.
    • Si esTrue, se ordena en orden ascendente por frecuencia; si esFalse(por defecto), se ordena en orden descendente por frecuencia.
  • Parámetro: normalize
    • Tipo: Booleano.
    • Si esTrue, devuelve la proporción de aparición de cada valor (entre 0 y 1), en lugar de la frecuencia absoluta. El valor por defecto esFalse。
  • Parámetro: bins
    • Tipo: Entero o None.
    • Si se especifica un entero, los datos numéricos se agrupan en intervalos y se cuenta la frecuencia (similar a un histograma). No es aplicable a datos categóricos.
  • Parámetro: dropna
    • Tipo: Booleano.
    • Si se incluyen valores NaN en el resultado. El valor por defecto esTrue(no incluirlos).
  • Descripción de la función

    • Valor de retorno: devuelve una Series, cuyos índices son los valores únicos y cuyos valores son las frecuencias (o proporciones).
    • Efecto: cuenta y muestra el número de veces que aparece cada valor único.

    Ejemplos

    A través de una serie de ejemplos, de simples a complejos, dominaremos por completopd.value_counts()el uso de la función.

    Ejemplo 1: Uso básico - Contar la frecuencia de datos categóricos

    Ejemplo

    import pandas as pd
    import numpy as np

    # 1. Crear una Series con valores duplicados
    colors = pd.Series(['red', 'blue', 'green', 'red', 'blue', 'yellow', 'red', 'blue', 'blue'])

    print("=== Serie original ===")
    print(colors)

    # 2. Usar pd.value_counts() para contar frecuencias
    result = pd.value_counts(colors)
    print("\n=== Conteo de frecuencia de pd.value_counts() ===)
    print(result)

    Resultado esperado:

    === 原始 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
    

    Análisis del código:

    1. El resultado se ordena de forma descendente por frecuencia: blue aparece más veces (4), le sigue red (3), y green y yellow aparecen 1 vez cada uno.
    2. Lo que se devuelve es una Series, cuyos índices son los valores de color y cuyos valores son el número de apariciones.

    Ejemplo 2: Uso del parámetro normalize para calcular proporciones

    normalize=TrueSe pueden convertir las frecuencias en proporciones, lo que facilita ver la distribución relativa de los datos.

    Ejemplo

    import pandas as pd
    import numpy as np

    # Crear datos de votación
    votes = pd.Series(['A', 'B', 'A', 'C', 'A', 'B', 'A', 'A', 'C', 'B', 'A', 'B'])

    print("=== Datos de votación ===")
    print(votes)

    # 1. Frecuencia absoluta
    print("\n=== Frecuencia absoluta ===)
    print(pd.value_counts(votes))

    # 2. Proporción relativa (normalize=True)
    print("\n=== Proporción relativa ===)
    result_normalized = pd.value_counts(votes, normalize=True)
    print(result_normalized)
    print(f"\nSuma de proporciones: {result_normalized.sum():.2f})

    # 3. Ordenar de forma ascendente
    print("\n=== Orden ascendente ===)
    print(pd.value_counts(votes, ascending=True))

    Resultado esperado:

    === 投票数据 ===
    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
    

    Análisis del código:

    • Usandonormalize=Truese puede calcular rápidamente la proporción de cada categoría.
    • Todas las proporciones suman 1.0, lo que facilita el análisis de proporciones.
    • Usandoascending=Truese pueden ver los resultados en orden ascendente de frecuencia.

    Ejemplo 3: Tratar datos numéricos y usar el parámetro bins

    Para datos numéricos continuos, se puede utilizar elbinsparámetro bins para realizar el conteo por intervalos.

    Ejemplo

    import pandas as pd
    import numpy as np

    # 1. Crear datos numéricos
    scores = pd.Series([85, 90, 78, 92, 88, 76, 95, 82, 70, 89, 91, 77, 84, 86])

    print("=== Calificaciones de los estudiantes ===")
    print(scores)

    # 2. Sin agrupar - Contar cada valor único
    print("\n=== Contar cada puntuación ===)
    print(pd.value_counts(scores))

    # 3. Usar el parámetro bins para agrupar
    print("\n=== Dividido en 4 intervalos ===)
    result_bins = pd.value_counts(scores, bins=4)
    print(result_bins)

    # 4. Ver los límites de los intervalos
    print("\n=== Límites de los intervalos ===)
    print(f"Mínimo: {scores.min()}, Máximo: {scores.max()}")

    Resultado esperado:

    === 学生成绩 ===
    [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
    

    Esto es similar a un histograma, y permite ver que la distribución de las calificaciones se concentra principalmente en los rangos medio y alto. El parámetro bins divide los datos numéricos en intervalos discretos según su rango y luego cuenta la cantidad de datos en cada intervalo.

    Ejemplo 4: Manejo de valores faltantes

    Usandodropnael parámetro permite controlar si se cuentan los valores faltantes.

    Ejemplo

    import pandas as pd
    import numpy as np

    # 1. Datos con valores faltantes
    data = pd.Series(['a', 'b', np.nan, 'a', None, 'c', np.nan, 'b', 'a'])

    print("=== Datos con valores faltantes ===")
    print(data)

    # 2. Por defecto no se incluyen NaN (dropna=True)
    print("\n=== Por defecto no se incluyen NaN ===)
    print(pd.value_counts(data))

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

    # 4. Contar valores faltantes numéricos
    numeric_data = pd.Series([1, 2, np.nan, 3, 2, np.nan, 1, 4])
    print("\n=== Datos numéricos que incluyen NaN ===)
    print(pd.value_counts(numeric_data, dropna=False))

    Resultado esperado:

    === 包含缺失值的数据 ===
    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
    

    Análisis del código:

    • Por defecto (dropna=True), no se cuentan los valores NaN.
    • Usandodropna=Falsese puede ver el número de valores faltantes, lo cual es muy útil en el análisis de calidad de datos.
    • Los datos numéricos también son aplicables.

    Consejo: pd.value_counts()Es una de las funciones más importantes del análisis exploratorio de datos; permite comprender rápidamente la distribución de los datos. Si solo necesita obtener la lista de valores únicos sin necesidad de frecuencias, utilice lapd.unique()función.

    Pandas 常用函数Funciones comunes de Pandas

    Otras extensiones