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

Uso do fillna()

Olá.

Se em minha base tiver colunas do tipo string, data e bool, e em cada um deles tiver algum registro nulo, quando faço o fillna(0, inplace = True) qual resultado sairia para esses campos ?

Caso a biblioteca ignore os tipos e consiga simplesmente realizar o replace dos valores NaN para 0 em todos esses campos, como faço para ele tratar apenas em uma determinada coluna?

2 respostas
solução!

Olá Orlando,

Se você tiver um DataFrame com tipos diferentes de dados e alguns valores nulos, ao usar o método .fillna(), todos os nulos serão substituídos por zero. Em casos que houver dados do tipo datetime ou date, a substituição será por uma data zerada.

Execute o exemplo, para ver:

import pandas as pd
import numpy as np
from datetime import datetime

dados = pd.DataFrame({'col A' : [1,2,3,4,5,6,np.nan],
                      'col B' : ['a',np.nan,'c','d',np.nan,'e','f'],
                      'col C' : [np.nan,True,False,True,True,False,True],
                      'col D' : [datetime.now(),datetime.now(),np.nan,datetime.now(),datetime.now(),datetime.now(),datetime.now()]})

dados.fillna(0, inplace = True)
dados

Out[]: 
   col A col B  col C                      col D
0    1.0     a      0 2020-06-30 11:56:25.813239
1    2.0     0   True 2020-06-30 11:56:25.813239
2    3.0     c  False 1970-01-01 00:00:00.000000
3    4.0     d   True 2020-06-30 11:56:25.813239
4    5.0     0   True 2020-06-30 11:56:25.813239
5    6.0     e  False 2020-06-30 11:56:25.813239
6    0.0     f   True 2020-06-30 11:56:25.813239

Mas caso você queira substituir os valores nulos de apenas uma coluna, basta fazer o seguinte:

import pandas as pd
import numpy as np
from datetime import datetime

dados = pd.DataFrame({'col A' : [1,2,3,4,5,6,np.nan],
                      'col B' : ['a',np.nan,'c','d',np.nan,'e','f'],
                      'col C' : [np.nan,True,False,True,True,False,True],
                      'col D' : [datetime.now(),datetime.now(),np.nan,datetime.now(),datetime.now(),datetime.now(),datetime.now()]})

dados['col B'].fillna(0, inplace = True)
dados

Out[]: 
   col A col B  col C                      col D
0    1.0     a    NaN 2020-06-30 12:01:19.631239
1    2.0     0   True 2020-06-30 12:01:19.631239
2    3.0     c  False                        NaT
3    4.0     d   True 2020-06-30 12:01:19.631239
4    5.0     0   True 2020-06-30 12:01:19.631239
5    6.0     e  False 2020-06-30 12:01:19.631239
6    NaN     f   True 2020-06-30 12:01:19.631239

Abs

Muito obrigado!