0Pricing
Pandas & NumPy Academy · Aula

Mascaramento booleano e indexação avançada

Filtre vetores com condições booleanas e selecione elementos arbitrários usando vetores de índices inteiros.

Mascaramento booleano e indexação avançada é uma aula grátis de Pandas & NumPy Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Pandas & NumPy Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Pandas & NumPy Academy inclui 4 aulas no total.

Matrizes booleanas como máscaras

Uma máscara booleana é uma matriz de valores True/False. Use-a como índice e mantenha apenas os elementos marcados como True — sua principal ferramenta de filtragem.

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]

Condições booleanas compostas

Crie filtros compostos com & (e), | (ou) e ~ (não). Sempre coloque cada condição entre parênteses, ou a precedência poderá causar problemas.

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]

Modificando valores com indexação booleana

Você pode atribuir diretamente a uma seleção booleana, alterando apenas os elementos correspondentes no próprio lugar. É a maneira mais rápida de limitar valores discrepantes ou preencher valores ausentes.

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 em matrizes bidimensionais

Uma máscara booleana em uma matriz bidimensional sempre retorna um resultado unidimensional achatado. Para selecionar linhas inteiras, crie uma máscara unidimensional a partir de uma coluna e faça a indexação ao longo do eixo 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 com máscaras

np.where(condition, x, y) preserva a forma da matriz: escolhe x onde a condição é satisfeita e y nos demais casos. É perfeito para trocar valores sem achatar a matriz.

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']

Noções básicas de indexação avançada

Indexação avançada significa passar uma matriz de índices inteiros para obter elementos específicos — em qualquer ordem e com repetições. Ela sempre retorna uma cópia.

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]]

Indexação avançada em matrizes bidimensionais

Em uma matriz bidimensional, matrizes de índices pareadas selecionam pontos dispersos: m[rows, cols] obtém o elemento de cada par (linha, coluna), não uma submatriz inteira.

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 selecionar uma grade de linhas e colunas

np.ix_ seleciona uma submatriz em cada combinação das linhas e colunas que você listar — útil quando você quer muitas linhas E muitas colunas, não apenas 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() e np.argwhere()

np.nonzero retorna os índices dos elementos diferentes de zero (ou True) como uma tupla por eixo. np.argwhere fornece as mesmas informações empilhadas em linhas fáceis de ler.

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]]

Combinando indexação booleana e avançada

Combine as duas: use uma máscara booleana para filtrar linhas e, depois, a indexação avançada para reordenar colunas. Juntas, elas filtram e reorganizam os dados em uma única etapa simples.

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)

Desempenho: indexação booleana versus avançada

Tanto a indexação booleana quanto a avançada retornam cópias. Para filtrar, uma máscara booleana geralmente é a opção mais legível e suficientemente rápida — uma excelente escolha padrão.

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))

Verificação rápida

Verifique sua compreensão sobre máscaras booleanas e indexação avançada apresentada nesta lição.

Recapitulação da lição

Muito bem! As máscaras booleanas filtram e copiam, np.where preserva a forma da matriz, e a indexação avançada obtém quaisquer elementos que você indicar. A seguir: Series do Pandas!

Perguntas Frequentes

A aula “Mascaramento booleano e indexação avançada” é grátis?

Sim — o texto completo de “Mascaramento booleano e indexação avançada” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Pandas & NumPy Academy, atualize para CoddyKit PRO. O curso de Pandas & NumPy Academy inclui 4 aulas no total.

O que vou aprender em “Mascaramento booleano e indexação avançada”?

Filtre vetores com condições booleanas e selecione elementos arbitrários usando vetores de índices inteiros. Você pratica Pandas & NumPy Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Pandas & NumPy Academy?

Nenhuma experiência prévia é necessária. Pandas & NumPy Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Mascaramento booleano e indexação avançada”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Pandas & NumPy Academy?

Sim. Cada aula de Pandas & NumPy Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Funções universais (ufuncs)
  2. Funções de agregação
  3. Regras de transmissão
  4. Mascaramento booleano e indexação avançada
← Voltar para Pandas & NumPy Academy