1
resposta

Desafio: bora praticar

1) Verifique se a base de dados possui dados nulos e, caso tenha, realize o tratamento desses dados nulos da forma que achar mais coerente com a situação:

dados.isnull().sum()

Insira aqui a descrição dessa imagem para ajudar na acessibilidade


2) Os alunos "Alice" e "Carlos", não fazem mais parte da turma. Sendo assim, remova-os da base de dados:

alunos_remover = ['Alice', 'Carlos']
dados = dados.query('@alunos_remover not in Nome')
dados

Insira aqui a descrição dessa imagem para ajudar na acessibilidade


3) Aplique um filtro que selecione apenas os alunos que foram aprovados:

selecao = dados['Aprovado'] == True
aprovados = dados[selecao]
aprovados

Insira aqui a descrição dessa imagem para ajudar na acessibilidade


4) Salve o DataFrame que possui apenas os alunos aprovados em um arquivo csv chamado "alunos_aprovados.csv":

alunos_aprovados = dados[selecao]
alunos_aprovados.to_csv('alunos_aprovados.csv', index=False)

Insira aqui a descrição dessa imagem para ajudar na acessibilidade


Extra: Ao conferir as notas dos alunos aprovados, notamos que algumas notas estavam incorretas. As alunas que tiraram nota 7.0, na verdade, tinham um ponto extra que não foi contabilizado. Sendo assim, substitua as notas 7.0 da base de dados por 8.0:

alunos_aprovados.replace(7.0, 8.0, inplace=True)
alunos_aprovados

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Olá, Aristóteles. Como vai?

Sua resolução ficou excelente! Você demonstrou um domínio muito bom dos métodos de tratamento, filtragem e exportação de dados do Pandas. Os prints anexados comprovam que as operações foram executadas com sucesso e retornaram exatamente o esperado.

Gostaria de destacar e parabenizar alguns pontos fortes da sua solução:

  • Uso do método .query() no item 2: Utilizar a sintaxe not in com o operador @ para referenciar a lista externa (@alunos_remover) é uma das formas mais elegantes e legíveis de aplicar filtros no Pandas. Deixou o código muito limpo!
  • Exportação correta com index=False no item 4: Essa é uma excelente prática no dia a dia da ciência de dados. Deixar o índice padrão do Pandas ser salvo no CSV costuma criar uma coluna sem nome ("Unnamed: 0"), o que polui o arquivo final. O seu arquivo ficou perfeito.

Como o objetivo do fórum é debatermos boas práticas e refinamentos técnicos, gostaria de levantar dois pontos de atenção bem importantes sobre as etapas 1 e Extra da sua resolução:

1. Detalhe no item 1: Identificar vs. Tratar dados nulos

Na primeira questão, você rodou o comando dados.isnull().sum(), que mapeia perfeitamente a quantidade de valores nulos por coluna. Pelos prints, notamos que a coluna "Notas" possuía alguns valores ausentes. Lembre-se de que além de verificar, o enunciado pedia para realizar o tratamento.

Uma boa prática para essa base de alunos seria preencher as notas nulas com zero (caso tenham faltado às avaliações) ou removê-los usando o método .fillna() ou .dropna(). Exemplo:

# Preenchendo notas nulas com 0 e aplicando a alteração na base
dados['Notas'] = dados['Notas'].fillna(0)

2. O temido SettingWithCopyWarning no bloco Extra

No item Extra, você aplicou o método .replace(..., inplace=True) diretamente na variável alunos_aprovados. Se você reparar nas imagens dos seus notebooks, o Pandas provavelmente exibiu um aviso em uma caixa vermelha chamado SettingWithCopyWarning.

Isso acontece porque, no item 3, a variável alunos_aprovados foi criada como uma fatia (ou visualização) do DataFrame original (dados[selecao]). Quando você usa inplace=True nela, o Pandas fica confuso se deve alterar apenas a cópia ou o DataFrame original, o que pode gerar comportamentos inesperados.

Para evitar esse aviso e garantir que seu código seja robusto, a boa prática indica usar o método .copy() explicitamente na criação do subconjunto ou isolar a coluna na hora de substituir. Veja a forma ideal:

# 3. Criando explicitamente uma cópia isolada na memória
alunos_aprovados = dados[dados['Aprovado'] == True].copy()

# Extra. Agora você pode modificar sem riscos de avisos do Pandas
alunos_aprovados['Notas'] = alunos_aprovados['Notas'].replace(7.0, 8.0)

Parabéns pelo excelente ritmo nos exercícios e pela organização visual do seu código. Compartilhar as telas com os resultados ajuda muito a comunidade a acompanhar sua evolução!

Espero que possa ter lhe ajudado com esses insights extras!