3
respostas

DÚVIDAS__ Tirando valores nulos Vs Tratamento condicional

Prezado(a).

Ao assistir a aulas, temos os seguintes tópicos de aula e seus códigos:

Aula: "Tirando valores nulos"

Código_01:

** Para excluir do DataFreme os valores com Valor null **

A = dados.shape[0]

#Abrigara dados, isto é, nosso DataFrame original.

dados.dropna(subset = ['Valor'], inplace=True)

#Retira os dados que tem Valor null do DataFrame original.

B = dados.shape[0]

#Abrigará o resultado do novo conjunto de dados que não contém valores nulos

A-B

#Retornará exatamente a quantidade de linhas a serem eliminadas que tem Valor null


Aula: Tratamento condicional

Código_02:

A = dados.shape[0]

dados = dados[~selecao]

B = dados.shape[0]

A-B


DÚVIDA

Sobre a dinâmica e funções do Código_01 eu compreendi. Além disso, sobre a inversão booleana de dados[~selecao] no Código_02 compreendi também.

Entretanto, não entendi a dinâmica do Código_02. Como que esse código elimina de fato as linhas, tal como a função dropna no Código_01?

3 respostas

Olá Thiago,

A variável selecao é uma lista de valores True ou False, quando a gente faz por exemplo dados[selecao], o pandas já entende que queremos filtrar o DataFrame dados baseado nos valores de selecao.

Assim onde temos o valor True em selecao a linha do DataFrame vai ser mantida, e onde temos o valor False em selecao a linha equivalente no DataFrame vai ser eliminada.

Espero ter ajudado, qualquer dúvida é só falar!

Eu tambem nao entendi. Pra mim ficou bem confuso

Talvez visualizando cada item facilite o entendimento.

  1. DataFrame de exemplo:

    df = pd.DataFrame({
     'Nome': ['José', 'Maria', 'Pedro', 'Antônio'],
     'Idade': [29, 24, 20, 30],
    })

  2. Criação do filtro:

    selecao = pd.Series([True, False, False, True])
    # Pode ser também uma lista simples "selecao = [True, False, False, True]"

  3. Aplicando o filtro:

    df_filtrado = df[selecao]

    Resultado:

Veja que como as linhas 1 e 2 do filtro selecao são False as linhas 1 e 2 do DataFrame df serão eliminadas, sobrando apenas as linhas 0 e 3 no DataFrame final df_filtrado: