1
resposta

[Projeto] Desafio

Olá! Segue uma possível resolução do desafio utilizando Pandas.

Primeiro, importamos a biblioteca e lemos o arquivo CSV:

import pandas as pd

dados = pd.read_csv('alunos.csv')
  1. Verificando se existem dados nulos na base:
dados.isnull().sum()

Como a coluna de notas possui valores nulos, podemos substituir esses valores por 0:

dados = dados.fillna(0)
  1. Removendo os alunos Alice e Carlos da base de dados:
alunos_a_remover = dados.query('Nome == "Alice" | Nome == "Carlos"').index

dados.drop(alunos_a_remover, axis=0, inplace=True)
  1. Selecionando apenas os alunos aprovados:
selecao = dados['Aprovado'] == True

alunos_aprovados = dados[selecao]
  1. Salvando o DataFrame com os alunos aprovados em um arquivo CSV:
alunos_aprovados.to_csv('alunos_aprovados.csv', index=False)

Extra: substituindo as notas 7.0 por 8.0:

alunos_aprovados = alunos_aprovados.replace(7.0, 8.0)

Código completo:

import pandas as pd

dados = pd.read_csv('alunos.csv')

dados = dados.fillna(0)

alunos_a_remover = dados.query('Nome == "Alice" | Nome == "Carlos"').index
dados.drop(alunos_a_remover, axis=0, inplace=True)

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

alunos_aprovados = alunos_aprovados.replace(7.0, 8.0)

alunos_aprovados.to_csv('alunos_aprovados.csv', index=False)

alunos_aprovados
1 resposta

Olá, Filipe. Como vai?

Muito bacana a sua iniciativa de compartilhar a resolução do desafio aqui no fórum! O seu raciocínio lógico foi excelente e o código está muito bem estruturado, limpo e legível. Construir o passo a passo antes de juntar tudo no código completo é uma ótima prática de documentação e aprendizado.

Para agregar ainda mais valor ao seu projeto e expandir o seu repertório com a biblioteca Pandas, trago algumas sugestões de alternativas e boas práticas que você também pode testar e utilizar no seu dia a dia:

  • **Remoção de linhas com o método isin**: A sua abordagem buscando o index com query e depois utilizando o drop funciona perfeitamente. Uma outra forma muito utilizada no mercado para remover linhas baseadas em uma lista de valores é utilizar o método isin() associado ao operador de negação ~ (que inverte a seleção). Veja como o código fica um pouco mais direto:
# Mantém no DataFrame apenas as linhas onde o Nome NÃO é Alice nem Carlos
dados = dados[~dados['Nome'].isin(['Alice', 'Carlos'])]
  • Filtro simplificado de valores booleanos: Na hora de selecionar os alunos aprovados, você utilizou dados['Aprovado'] == True. Como essa coluna já armazena dados do tipo booleano (True ou False), você pode passar a própria coluna diretamente como máscara de filtro. O Pandas já entende nativamente que deve retornar as linhas verdadeiras:
# Filtra diretamente os valores True
alunos_aprovados = dados[dados['Aprovado']]
  • Uso do replace em colunas específicas: Você utilizou muito bem o método replace(7.0, 8.0). Como uma boa prática de segurança em Data Science, quando queremos alterar valores, é recomendado aplicar o método apenas na coluna de interesse. Ao aplicar no DataFrame inteiro, corremos o risco de substituir acidentalmente o número 7.0 em outras colunas que porventura tenham esse mesmo dado (como uma coluna de idade, IDs, etc.):
# Aplica a substituição estritamente na coluna de notas
alunos_aprovados['Notas'] = alunos_aprovados['Notas'].replace(7.0, 8.0)

Essas são apenas ferramentas adicionais para a sua caixa de ferramentas de análise de dados. A sua resolução original já cumpre os requisitos do desafio com maestria!

Espero que possa ter lhe ajudado!