Ei, Marcia!
Seu código está muito bacana! Você usou o Pandas direitinho para criar e trabalhar com o DataFrame, e a função categoriza_imc
ficou super bem feita, cobrindo todas as faixas de IMC de forma clara. A aplicação do apply
pra calcular e categorizar o IMC foi bem eficiente, e a saída com as colunas organizadas também.
Parabéns pelo trabalho, tá no caminho certo!
Uma ideia para treinar, teste adicionar uma validação para pesos ou alturas inválidos (ex.: negativos), por exemplo:
import pandas as pd
dados = {
'Pessoa': ['Ana', 'Bruno', 'Carla', 'Daniel', 'Eduarda', 'Felipe', 'Gabriela', 'Henrique'],
'Peso': [50, 80, 70, 95, 60, 110, 45, 130],
'Altura': [1.60, 1.75, 1.68, 1.80, 1.55, 1.90, 1.50, 1.85]
}
df_saude = pd.DataFrame(dados)
def valida_dados(row):
if row['Peso'] <= 0 or row['Altura'] <= 0:
return 'Dados inválidos'
return 'Válido'
df_saude['Validação'] = df_saude.apply(valida_dados, axis=1)
def categoriza_imc(imc):
if imc < 18.5:
return 'Abaixo do peso'
elif imc <= 24.9:
return 'Peso Normal'
elif imc <= 29.9:
return 'Sobrepeso'
elif imc <= 34.9:
return 'Obesidade Grau 1'
elif imc <= 39.9:
return 'Obesidade Grau 2'
elif imc >= 40:
return 'Obesidade Grau 3'
df_saude['IMC'] = df_saude.apply(
lambda row: row['Peso'] / (row['Altura'] ** 2) if row['Validação'] == 'Válido' else None, axis=1
).round(2)
df_saude['CategorizaIMC'] = df_saude['IMC'].apply(
lambda x: categoriza_imc(x) if pd.notnull(x) else 'Não calculado'
)
print(df_saude[['Pessoa', 'Peso', 'Altura', 'IMC', 'CategorizaIMC', 'Validação']])
Continue praticando e compartilhando suas atividades.
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!