Objetivos do Desafio
- Verificar e tratar dados nulos - Identificar valores NaN e decidir como tratá-los
- Remover registros específicos - Eliminar linhas de Alice e Carlos
- Filtrar alunos aprovados - Manter apenas quem tem nota >= 7.0
- Salvar resultado - Exportar para CSV
- Ajustar notas - Substituir 7.0 por 8.0 usando replace()
PASSO 1: VERIFICAR DADOS NULOS
Identificar dados nulos
# Ver quantos valores nulos existem em cada coluna
print(df.isnull().sum())
# Ver percentual de dados nulos
percentual = (df.isnull().sum() / len(df) * 100)
print(percentual)
# Ver todas as linhas com valores nulos
print(df[df.isnull().any(axis=1)])
Estratégias de tratamento
Opção 1: Remover linhas com nulos (mais comum)
df = df.dropna()
Opção 2: Preencher com valor específico
df['Notas'].fillna(0) # Preencher com 0
df['Notas'].fillna(df['Notas'].mean()) # Preencher com a média
Opção 3: Remover apenas colunas específicas
df = df.dropna(subset=['Notas']) # Remove se Notas for nulo
PASSO 2: REMOVER ALUNOS ESPECÍFICOS
Método 1: Usando isin() com ~ (negação)
# Remover Alice e Carlos
df = df[~df['Aluno'].isin(['Alice', 'Carlos'])]
Como funciona:
isin(['Alice', 'Carlos'])→ Retorna True para Alice e Carlos~(til) → Inverte o resultado (True vira False, False vira True)- Resultado: Mantém apenas quem NÃO é Alice nem Carlos
Método 2: Usando drop() com índices
# Se souber os índices das linhas
df = df.drop([0, 2]) # Remove linhas 0 e 2
Método 3: Usando query()
df = df.query("Aluno not in ['Alice', 'Carlos']")
PASSO 3: FILTRAR ALUNOS APROVADOS
Filtragem simples
# Manter apenas quem tem nota >= 7.0
df_aprovados = df[df['Notas'] >= 7.0].copy()
Por que usar .copy()?
- Evita avisos do pandas sobre SettingWithCopyWarning
- Garante que você está trabalhando com uma cópia, não uma visualização
Filtragem com múltiplas condições
# Aprovados E com frequência > 80%
df_aprovados = df[(df['Notas'] >= 7.0) & (df['Frequência'] > 0.8)]
# Aprovados OU com frequência > 90%
df_aprovados = df[(df['Notas'] >= 7.0) | (df['Frequência'] > 0.9)]
PASSO 4: SALVAR EM ARQUIVO CSV
# Salvar sem índice
df_aprovados.to_csv('alunos_aprovados.csv', index=False)
# Com opções adicionais
df_aprovados.to_csv(
'alunos_aprovados.csv',
index=False,
sep=';', # Usar ponto-e-vírgula em vez de vírgula
encoding='utf-8' # Codificação de caracteres
)