Función Pandas pd.unique()
pd.unique()es una función de la biblioteca Pandas que se utiliza paraobtener valores únicos de un array.Esta función devuelve todos los valores no repetidos del array de entrada, eliminando los duplicados.
Esta es una operación común en el análisis de datos, por ejemplo, contar cuántos valores distintos hay en una columna, u obtener todas las categorías de una variable categórica.
Significado de la palabra: uniqueSignifica "único, distintivo"; aquí se refiere a los valores no repetidos que devuelve el array.
Sintaxis básica y parámetros
pd.unique()Es una función de alto nivel de la biblioteca Pandas, utilizada para extraer valores únicos de un array.
Formato de sintaxis
pd.unique(values)
Descripción de parámetros
- Parámetro:
values- Tipo: objeto similar a un array, como listas, Series, arrays unidimensionales, etc.
- Descripción: los datos de entrada para extraer valores únicos. Puede ser cualquier estructura de array unidimensional.
Descripción de la función
- Valor de retornoDevuelve un ndarray (array de NumPy) que contiene todos los valores únicos.
- Efectoelimina los valores duplicados de los datos de entrada, conservando cada valor solo una vez.
Ejemplos
A través de una serie de ejemplos, de simples a complejos, dominaremos por completo elpd.unique()uso de la función.
Ejemplo 1: Uso básico: extraer valores únicos de una Series
Ejemplo
import numpy as np
# 1. Crear una Series con valores duplicados
colors = pd.Series(['red', 'blue', 'green', 'red', 'blue', 'yellow', 'red'])
print("=== Series original ===")
print(colors)
# 2. Usar pd.unique() para obtener valores únicos
unique_values = pd.unique(colors)
print("\n=== valores únicos de pd.unique() ===")
print(unique_values)
print(f"\n"Cantidad de valores únicos: {len(unique_values)}")
Resultado esperado:
=== 原始 Series === 0 red 1 blue 2 green 3 red 4 blue 5 yellow 6 red dtype: object === pd.unique() 唯一值 === ['red' 'blue' 'green' 'yellow'] 唯一值数量: 4
Análisis del código:
- La Series original tiene 7 elementos, pero solo 4 valores únicos.
pd.unique()Devuelve un array de NumPy que contiene todos los valores no repetidos.- El resultado devuelto no garantiza un orden (pero normalmente sigue el orden de primera aparición).
Ejemplo 2: Extraer valores únicos de listas y arrays
pd.unique()No solo puede procesar Series, sino también varios tipos de estructuras de arrays.
Ejemplo
import numpy as np
# 1. Extraer valores únicos de una lista
numbers = [1, 2, 3, 2, 1, 4, 5, 3, 2]
print("=== Lista original ===")
print(numbers)
unique_numbers = pd.unique(numbers)
print("\n=== valores únicos de la lista ===")
print(unique_numbers)
print(f"Tipo: {type(unique_numbers)}")
# 2. Extraer valores únicos de un array de NumPy
arr = np.array(['a', 'b', 'a', 'c', 'b', 'd'])
print("\n=== array de NumPy ===")
print(arr)
print("Valores únicos:", pd.unique(arr))
# 3. Extraer de una columna de DataFrame
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie', 'Alice', 'Diana'],
'city': ['Beijing', 'Shanghai', 'Beijing', 'Beijing', 'Guangzhou']
})
print("\n=== DataFrame ===")
print(df)
print("\nValores únicos de la columna name:", pd.unique(df['name']))
print("Valores únicos de la columna city:", pd.unique(df['city']))
Resultado esperado:
=== 原始列表 ===
[1, 2, 3, 2, 1, 4, 5, 3, 2]
=== 列表的唯一值 ===
[1 2 3 4 5]
Tipo: <class 'numpy.ndarray'>
=== NumPy 数组 ===
['a' 'b' 'a' 'c' 'b' 'd']
唯一值: ['a' 'b' 'c' 'd']
=== DataFrame ===
name city
0 Alice Beijing
1 Bob Shanghai
2 Charlie Beijing
3 Alice Beijing
4 Diana Guangzhong
=== name 列的唯一值: ['Alice' 'Bob' 'Charlie' 'Diana']
=== city 列的唯一值: ['Beijing' 'Shanghai' 'Guangzhou']
Análisis del código:
pd.unique()Puede procesar listas de Python, arrays de NumPy y columnas de DataFrame.- El resultado devuelto siempre es un array de NumPy unidimensional.
- Al procesar un DataFrame, es necesario especificar la columna concreta (usando la sintaxis de corchetes).
Ejemplo 3: Manejo de datos numéricos y ordenamiento
Al manejar valores únicos numéricos, se pueden ordenar y analizar estadísticamente con facilidad.
Ejemplo
import numpy as np
# 1. Series con valores numéricos duplicados
scores = pd.Series([85, 90, 78, 85, 92, 90, 78, 88, 95])
print("=== Puntuaciones originales ===")
print(scores)
# 2. Obtener valores únicos y ordenar
unique_scores = pd.unique(scores)
print("\n=== valores únicos (sin ordenar) ===)
print(unique_scores)
# 3. Valores únicos ordenados
unique_sorted = np.unique(unique_scores)
print("\n=== valores únicos (ordenados) ===)
print(unique_sorted)
# 4. Contar la frecuencia de cada valor único
print("\n=== valores únicos y frecuencias ===)
value_counts = pd.Series(scores).value_counts()
print(value_counts)
# 5. Obtener estadísticas de los valores únicos
print("\n=== estadísticas básicas ===)
print(f"Cantidad de valores únicos: {len(unique_scores)}")
print(f"Mínimo: {unique_scores.min()}")
print(f"Máximo: {unique_scores.max()}")
print(f"Promedio: {unique_scores.mean():.2f}")
Resultado esperado:
>--- 原始分数 --- 0 85 1 90 2 78 85、90、78 各出现 2 次,88、95 各出现 1 次。 === 唯一值及频次 === 85 2 90 2 78 2 88 1 95 1 dtype: int === 基本统计 === 唯一值数量: 5 最小值: 78 最大值: 95 平均值: 86.40
Análisis del código:
- Se puede usar
np.unique()para ordenar el resultado. - Combinado con
value_counts()se puede ver la frecuencia de aparición de cada valor único. - El array de valores únicos se puede usar en cálculos numéricos como un array normal.
Ejemplo 4: Manejo de valores faltantes
pd.unique()Devuelve los valores faltantes (NaN) como un valor único válido.
Ejemplo
import numpy as np
# 1. Datos con valores faltantes
data = pd.Series(['a', 'b', np.nan, 'a', None, 'c', np.nan, 'b'])
print("=== Datos con valores faltantes ===")
print(data)
# 2. Obtener valores únicos (NaN se incluirá como un valor único)
unique_with_nan = pd.unique(data)
print("\n=== valores únicos incluyendo NaN ===)
print(unique_with_nan)
print(f"Cantidad de valores únicos (incluyendo NaN): {len(unique_with_nan)}")
# 3. Valores únicos después de excluir NaN
unique_no_nan = pd.unique(data[data.notna()])
print("\n=== valores únicos excluyendo NaN ===)
print(unique_no_nan)
print(f"Cantidad de valores únicos (sin NaN): {len(unique_no_nan)}")
# 4. Usar isna() para comprobar si hay NaN
has_nan = pd.isna(unique_with_nan).any()
print(f"\n¿Existe NaN?: {has_nan}")
Resultado esperado:
=== 包含缺失值的数据 ===
0 a
1 b
2 NaN
3 a
4 None
5 different 'c' appears twice: None and NaN are both treated as missing values.
print("\n=== 唯一值数量(含 NaN): 3 ===")
print("['a', 'b', nan]")
=== 排除 NaN 后的唯一值 ===
['a', 'b', 'c']
唯一值数量(不含 NaN): 3
Análisis del código:
- Tanto NaN como None se consideran valores faltantes y se cuentan como uno solo en los valores únicos.
- Se puede usar
data[data.notna()]para filtrar primero los valores faltantes y luego extraer los valores únicos. pd.isna()Se puede comprobar si el array de valores únicos contiene NaN.
Otras extensionesConsejo:
pd.unique()Devuelve un array de NumPy; si necesitas devolver un objeto de pandas (como Series), puedes usar elSeries.unique()método, que devolverá una Series.
Funciones comunes de Pandas