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

fillna() com inplace e dicionário

Olá!

Acho que é uma dúvida um tanto boba, mas enfim...

Na aula, o professor, ao explicar o fillna(), começa o código dessa maneira:

dados.fillna(0, inplace = True)

Porém, depois ele muda de ideia para mostrar como usar o fillna() passando um dicionário, e atribuindo isso ao dataframe original:

dados = dados.fillna({'Condominio': 0, 'IPTU': 0})

Minha dúvida é: no exemplo acima, não posso usar o parâmetro inplace? Ou seja, estaria errado se eu fizesse o abaixo, sem atribuir o resultado ao dataframe original?

dados.fillna({'Condominio': 0, 'IPTU': 0}, inplace = True)

Obrigado, Matheus

3 respostas

Olá Matheus, boa observação a sua, aposto que outros possam ter se perguntado a mesma coisa.

O exemplo do professor está correto: dados = dados.fillna({'Condominio': 0, 'IPTU': 0})

porque se lê assim: variável RECEBE variável.método(...)

Como ela está recebendo a si mesma (com as devidas alterações. Seria redundante ou até mesmo daria erro usar o argumento inplace).

DataFrame.fillna(0, inplace = True) DataFrame = DataFrame.fillna(0)

São duas formas de expressão, mas que tem o mesmo resultado. Entretanto, cada qual tem suas vantagens. Espero ter esclarecido um pouco sua dúvida.

Obrigado, Thiago. Eu fiquei na dúvida se, por ser utilizado um dicionário, o inplace poderia ter um comportamento diferente e por isso o professor decidiu por atribuir daquele jeito.

solução!

Boa noite Matheus!

Não diga que sua dúvida é boba, por que eu fiquei me perguntando a mesma coisa! kkk

Como no exemplo do professor ao final o Dataframe foi alterado e o arquivo sobrescrito, teria que refazer toda a aula para poder testar o seu exemplo.

Para poupar trabalho resolvi testar com o dataframe que tem como exemplo no tutorial do método .fillna() --> acessei usando o (SHIFT + TAB), como o professor ensinou:

import numpy as np
df = pd.DataFrame([[np.nan, 2, np.nan, 0],
                    [3, 4, np.nan, 1],
                    [np.nan, np.nan, np.nan, 5],
                    [np.nan, 3, np.nan, 4]],
                   columns=list('ABCD'))
df

Saída:


    A    B    C    D
0    NaN    2.0    NaN    0
1    3.0    4.0    NaN    1
2    NaN    NaN    NaN    5
3    NaN    3.0    NaN    4

Eu copiei o seu código e chamei o método direto no dataframe, passando o dicionário e o inplace = True e funcionou perfeitamente:

df.fillna({'A': 8, 'B': 9}, inplace = True)
df

Saída:


    ****A    B    C    D
0    8.0    2.0    NaN    0
1    3.0    4.0    NaN    1
2    8.0    9.0    NaN    5
3    8.0    3.0    NaN    4