Función Pandas pd.value_counts()
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 es
True(orden descendente por frecuencia).
ascending
- Tipo: Booleano.
- Si es
True, se ordena en orden ascendente por frecuencia; si esFalse(por defecto), se ordena en orden descendente por frecuencia.
normalize
- Tipo: Booleano.
- Si es
True, 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。
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.
dropna
- Tipo: Booleano.
- Si se incluyen valores NaN en el resultado. El valor por defecto es
True(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 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:
- 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.
- 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 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:
- Usando
normalize=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.
- Usando
ascending=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 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 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. - Usando
dropna=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.
Otras extensionesConsejo:
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.
Funciones comunes de Pandas