Enmascaramiento booleano e indexación avanzada
Filtre arrays con condiciones booleanas y seleccione elementos arbitrarios mediante arrays de índices enteros.
Enmascaramiento booleano e indexación avanzada es una lección gratuita de Pandas & NumPy Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Pandas & NumPy Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Pandas & NumPy Academy incluye 4 lecciones en total.
Arrays booleanos como máscaras
Una máscara booleana es un array de valores True/False. Úsela como índice y conservará solo los elementos marcados como True: su herramienta principal de filtrado.
import numpy as np
a = np.array([5, 3, 8, 1, 9, 2, 7])
mask = a > 4
print(mask) # [ True False True False True False True]
print(a[mask]) # [5 8 9 7]Condiciones booleanas compuestas
Construya filtros compuestos con & (y), | (o) y ~ (no). Ponga siempre cada condición entre paréntesis para evitar problemas de precedencia.
import numpy as np
a = np.array([3, 7, 2, 9, 1, 6, 4, 8])
# Elements between 4 and 8 inclusive
result = a[(a >= 4) & (a <= 8)]
print(result) # [7 6 4 8]
# Elements less than 3 or greater than 7
result2 = a[(a < 3) | (a > 7)]
print(result2) # [2 9 1 8]Modificación de valores mediante indexación booleana
Puede asignar directamente a una selección booleana y cambiar únicamente los elementos coincidentes en el propio array. Es la forma más rápida de limitar valores atípicos o rellenar valores faltantes.
import numpy as np
a = np.array([5, -3, 8, -1, 2, -7])
a[a < 0] = 0 # zero out negatives in-place
print(a) # [5 0 8 0 2 0]
# Cap values above 6
a[a > 6] = 6
print(a) # [5 0 6 0 2 0]Máscaras booleanas en arrays bidimensionales
Una máscara booleana aplicada a un array bidimensional siempre devuelve un resultado unidimensional y plano. Para seleccionar filas completas, construya una máscara unidimensional a partir de una columna e indexe a lo largo del eje 0.
import numpy as np
m = np.array([[1, 5], [3, 2], [8, 4], [6, 7]])
# Select rows where first column > 4
mask = m[:, 0] > 4
print(mask) # [False False True True]
print(m[mask]) # [[8 4] [6 7]]np.where con máscaras
np.where(condition, x, y) conserva la forma del array: selecciona x donde se cumple la condición y y en los demás casos. Es perfecto para sustituir valores sin aplanar el array.
import numpy as np
a = np.array([3, -1, 5, -2, 4])
result = np.where(a >= 0, a, 0) # keep positives, replace negatives
print(result) # [3 0 5 0 4]
# Recode: above-average -> 'high', else -> 'low'
labels = np.where(a >= a.mean(), 'high', 'low')
print(labels) # ['high' 'low' 'high' 'low' 'high']Conceptos básicos de la indexación avanzada
La indexación avanzada consiste en pasar un array de índices enteros para obtener elementos específicos, en cualquier orden y con repeticiones. Siempre devuelve una copia.
import numpy as np
a = np.array([10, 20, 30, 40, 50])
idx = np.array([4, 1, 1, 3])
print(a[idx]) # [50 20 20 40]
# 2D index shape -> 2D output
idx2d = np.array([[0, 2], [4, 1]])
print(a[idx2d]) # [[10 30] [50 20]]Indexación avanzada en arrays bidimensionales
En un array bidimensional, los arrays de índices emparejados seleccionan puntos dispersos: m[rows, cols] obtiene el elemento de cada par (fila, columna), no una submatriz completa.
import numpy as np
m = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# Select elements at (0,2), (1,0), (2,1)
rows = [0, 1, 2]
cols = [2, 0, 1]
print(m[rows, cols]) # [3 4 8]np.ix_ para seleccionar una cuadrícula de filas y columnas
np.ix_ selecciona una submatriz en cada combinación de las filas y columnas que indique. Es útil cuando desea obtener muchas filas Y muchas columnas, no solo pares.
import numpy as np
m = np.arange(16).reshape(4, 4)
print(m)
# Select rows 0,2 and columns 1,3
ix = np.ix_([0, 2], [1, 3])
print(m[ix])
# [[ 1 3]
# [ 9 11]]np.nonzero() y np.argwhere()
np.nonzero devuelve los índices de los elementos distintos de cero (o True) como una tupla por eje. np.argwhere proporciona la misma información apilada en filas fáciles de leer.
import numpy as np
a = np.array([0, 3, 0, 5, 0, 7])
print(np.nonzero(a)) # (array([1, 3, 5]),)
print(np.argwhere(a > 0)) # [[1] [3] [5]]Combinación de indexación booleana y avanzada
Combine ambas técnicas: use una máscara booleana para filtrar filas y después indexación avanzada para reordenar columnas. Juntas permiten filtrar y reorganizar los datos en un solo paso claro.
import numpy as np
data = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
scores = np.array([0.9, 0.3, 0.8])
# Keep high-scoring rows, reorder columns to [2, 0, 1]
high = data[scores > 0.5]
reordered = high[:, [2, 0, 1]]
print(reordered)Rendimiento: indexación booleana frente a avanzada
Tanto la indexación booleana como la avanzada devuelven copias. Para filtrar, una máscara booleana suele ser la opción más legible y es suficientemente rápida: un excelente valor predeterminado.
import numpy as np
a = np.random.rand(1_000_000)
# Boolean mask -- readable and fast
result = a[a > 0.5]
print('filtered size:', result.size) # ~500000
# Equivalent with np.where + fancy index
idx = np.where(a > 0.5)[0]
result2 = a[idx]
print('same result:', np.array_equal(result, result2))Comprobación rápida
Compruebe su comprensión de las máscaras booleanas y la indexación avanzada de esta lección.
Resumen de la lección
¡Muy bien! Las máscaras booleanas filtran y copian, np.where conserva la forma del array y la indexación avanzada obtiene cualquier elemento que indique. A continuación: ¡Series de Pandas!
Preguntas frecuentes
¿La lección «Enmascaramiento booleano e indexación avanzada» es gratis?
Sí — el texto completo de «Enmascaramiento booleano e indexación avanzada» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Pandas & NumPy Academy, actualiza a CoddyKit PRO. El curso de Pandas & NumPy Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Enmascaramiento booleano e indexación avanzada»?
Filtre arrays con condiciones booleanas y seleccione elementos arbitrarios mediante arrays de índices enteros. Practicas Pandas & NumPy Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Pandas & NumPy Academy?
No se requiere experiencia previa. Pandas & NumPy Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Enmascaramiento booleano e indexación avanzada»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Pandas & NumPy Academy?
Sí. Cada lección de Pandas & NumPy Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Funciones universales (ufuncs)
- Funciones de agregación
- Reglas de broadcasting
- Enmascaramiento booleano e indexación avanzada