0Pricing
Pandas & NumPy Academy · Lección

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

  1. Funciones universales (ufuncs)
  2. Funciones de agregación
  3. Reglas de broadcasting
  4. Enmascaramiento booleano e indexación avanzada
← Volver a Pandas & NumPy Academy