Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Manipulação de dados

Bom dia,tudo bem?

Estou com uma dúvida para realizar algumas tarefas em uma base de dados com várias colunas relacionadas a pacientes diabéticos.

Dentre esses valores, tenho a idade e a glicemia dos pacientes.

Para alguns pacientes tenho glicemia igual a 0, ou seja, valores errados que devem ser susbtituídos.

Estou com dificuldade nas seguintes tarefas (não sei se devo utilizar somente o pandas ou se devo usar o numpy também):

1) Transformar valores nulos em NaN;

2) Substituir os missing values pela média dos pacientes de acordo com sua idade.

Obrigado, desde já.

2 respostas
solução!

Olá Murilo, tudo bem? Espero que sim!

Primeiro vou criar um DataFrame de exemplo, importanto a biblioteca pandas e numpy, pois ambas serão necessárias.

import pandas as pd
import numpy as np

idades = [18,17,26,23,18,17,20,23,19,18]
glicemia = [120,110,160,110,150,125,163,105,103,0]
dados = pd.DataFrame({'idades': idades, 'glicemia': glicemia})

Código usando pandas e numpy, com conjunto de dados de exemplo

Respondendo as suas perguntas separadamente, temos:

1) Transformar valores nulos em NaN

Para transformar valores nulos em NaN, basta usar o seguinte código:

dados['glicemia'] = dados['glicemia'].replace(0, np.nan)

Dessa forma, a coluna com os dados da glicemia terão os valores 0 substituídos pelo objeto np.nan da biblioteca numpy.

Substituindo valores iguais a 0 por np.nan

2) Substituir os missing values pela média dos pacientes de acordo com sua idade.

Para substituir os missing values, utilizaremos a função fillna() da biblioteca pandas. Como o intuito é substituir por valores dependendo da idade, vamos utilizar o groupby() para fazer o agrupamento pela idade e utilizar o transform() para aplicar as transformações a cada um dos grupos separadamente, fazendo uso de uma função lambda que aplicará o fillna() em cada um dos grupos x separadamente. Vamos reatribuir o resultado à coluna dados['glicemia']. O código ficará assim:

dados['glicemia'] = dados.groupby('idades').transform(lambda x: x.fillna(x.mean()))

O resultado final será:

Substituindo valores np.nan por média de cada grupo usando biblioteca pandas

No exemplo apenas a glicemia com idade 18 foi substituída pela média da glicemia de idade correspondente a 18 anos, cuja média era 135.

Espero que tenha tirado sua dúvida.

Estou à disposição. Bons estudos!

Muito obrigado mesmo João!! Resposta top!! :)