Programación con Python para Datos · Programación

Indexación avanzada y máscaras booleanas

Seleccionar y filtrar elementos de arrays con índices booleanos, índices de posición y máscaras compuestas.

Indexación avanzada y máscaras booleanas

Ilustracion de Python para datos: DataFrame, graficas y arrays de NumPy.
Python para ciencia de datos: NumPy, pandas y manipulacion de datos.

Mapa conceptual

Seleccionar con condiciones Filtrar «todos los valores mayores que cero» sin un bucle es una de las operaciones más usadas en datos. La herramienta es la máscara booleana: un array de verdaderos y falsos que decide qué pasa.

Indexación básica

Un array se indexa por posición como las listas: a[2] toma el tercer elemento; una multidimensional usa coma, m[0, 1]. Los rebanados (slices) con dos puntos devuelven vistas, no copias, así que un cambio en la vista afecta al original si no lo deseas.

Array booleano como máscara

Una comparación como a 0 no devuelve un sí o no, sino un array de booleanos del mismo tamaño. Al usar ese array para indexar, a[a 0], NumPy devuelve solo los elementos donde la condición era verdadera. Esto es el filtrado puro.

Combinar condiciones

np.where

where(condicion, valor_si, valor_no) construye un nuevo array eligiendo elemento a elemento según la máscara, sin bucles. Es la versión vectorizada del «si esto, aquello, de lo contrario esto otro», perfecta para crear columnas derivadas.

Índices de posición (fancy indexing)

En lugar de una condición, pasas un array de enteros con las posiciones que quieres: a[[0, 2, 5]] toma esos tres elementos, en ese orden y permitiendo repetir índices. Sirve para reordenar o remuestrear.

Cada forma de indexar responde a una pregunta distinta sobre los datos.
ModoSintaxis (idea)Devuelve
Por posicióna[0], m[1, 2]un elemento escalar
Rebanadoa[1:4]una vista del segmento
Máscara booleanaa[a 0]copia de los que cumplen
Fancy indexa[[0, 2, 5]]copia en el orden dado

¿Qué devuelve la expresión a[a 0] en un array NumPy?

Asignar con máscara

Las máscaras también escriben: a[a 0] = 0 pone a cero todos los negativos de golpe. Este patrón de «limpiar» valores inválidos es constantísimo al preparar datos antes de un análisis.

Contar y resumir con máscaras

Como los booleanos son 0 y 1 al sumarlos, a 0 seguido de .sum() cuenta cuántos cumplen la condición, y .mean() da la proporción. Sin bucles, obtienes la frecuencia de un evento sobre todo el array.

Cuentas de verdad

np.count_nonzero y np.any / np.all responden a preguntas como «¿hay algún valor ausente?» o «¿están todos ordenados?». Combinadas con máscaras cubren la mayoría de validaciones rápidas sobre un array.

Errores frecuentes

Para unir dos condiciones sobre arrays se emplean los operadores de Python and y or.

Del array al DataFrame

Este mismo mecanismo de filtrado es el que usarás en Pandas cada vez que escribas df[df.ventas 100]. Entender la máscara booleana sobre arrays te da la base de todo el filtrado de tablas.

Clasifica cada expresión:

Mascara
Fancy
Rebanado
Basica

NumPy Docs
Guía oficial de indexación, rebanado e indexación avanzada.

Dado un array de calificaciones, describe con máscaras cómo obtendrías: (1) solo los aprobados, (2) cuántos suspensos hay y (3) poner los negativos a cero. ¿Por qué evitas un bucle?

Documentacion pandas
Guia de referencia para manipulacion de datos en Python.