En análisis de datos no siempre trabajamos con todos los elementos. A menudo necesitamos filtrar o seleccionar valores que cumplen ciertas condiciones. NumPy ofrece herramientas potentes: indexación booleana, máscaras y np.where
.
Consiste en aplicar una condición lógica sobre un array. El resultado es otro array con valores True
/False
que usamos para filtrar.
import numpy as np
arr = np.array([10, 20, 30, 40, 50])
# Crear un filtro booleano
filtro = arr > 25
print("Filtro booleano:", filtro)
# Aplicar filtro al array
print("Elementos mayores a 25:", arr[filtro])
Salida:
Filtro booleano: [False False True True True]
Elementos mayores a 25: [30 40 50]
👉 Muy útil para aplicar condiciones sin escribir bucles.
Una máscara es un array booleano que enmascara valores de interés.
arr = np.arange(1, 11) # [1 2 3 4 5 6 7 8 9 10]
mascara = arr % 2 == 0 # Números pares
print("Máscara:", mascara)
print("Números pares:", arr[mascara])
Salida:
Máscara: [False True False True False True False True False True]
Números pares: [ 2 4 6 8 10]
Podemos combinar condiciones con operadores lógicos: &
(AND), |
(OR) y ~
(NOT).
# Seleccionar números mayores a 3 y menores a 8
mascara = (arr > 3) & (arr < 8)
print("Condición (3 < arr < 8):", arr[mascara])
Salida:
Condición (3 < arr < 8): [4 5 6 7]
np.where
La función np.where
devuelve los índices donde se cumple una condición. También sirve como un if vectorizado.
arr = np.array([5, 10, 15, 20, 25])
indices = np.where(arr > 12)
print("Índices de elementos > 12:", indices)
print("Elementos:", arr[indices])
Salida:
Índices de elementos > 12: (array([2, 3, 4]),)
Elementos: [15 20 25]
Podemos usar np.where(condición, valor_si_verdadero, valor_si_falso)
.
arr = np.array([5, 10, 15, 20, 25])
# Si el elemento es mayor a 15 "Alto", si no "Bajo"
resultado = np.where(arr > 15, "Alto", "Bajo")
print("Clasificación:", resultado)
Salida:
Clasificación: ['Bajo' 'Bajo' 'Bajo' 'Alto' 'Alto']
Nota: Con estas técnicas filtrás y seleccionás datos en NumPy de forma flexible, algo clave en cualquier proyecto de ciencia de datos.