Suponha que eu tenha um DataFrame com alguns NaN
s:
>>> import pandas as pd
>>> df = pd.DataFrame([[1, 2, 3], [4, None, None], [None, None, 9]])
>>> df
0 1 2
0 1 2 3
1 4 NaN NaN
2 NaN NaN 9
O que eu preciso fazer é substituir todos os itens NaN
com o primeiro não NaN
valor na mesma coluna acima. Supõe-se que a primeira linha nunca conterá a NaN
. Portanto, no exemplo anterior, o resultado seria
0 1 2
0 1 2 3
1 4 2 3
2 4 2 9
Posso apenas percorrer todo o DataFrame, coluna por coluna, elemento por elemento e definir os valores diretamente, mas existe uma maneira fácil (idealmente sem loop) de conseguir isso?
Você pode usar
pandas.DataFrame.fillna
com amethod='ffill'
opção'ffill'
significa 'preenchimento para frente' e propagará a última observação válida para frente. A alternativa é a'bfill'
que funciona da mesma maneira, mas ao contrário.Há também uma função de sinônimo direto para isso
pandas.DataFrame.ffill
, para simplificar as coisas.fonte
Uma coisa que notei ao tentar esta solução é que, se você tiver N / A no início ou no final da matriz, o preenchimento e o preenchimento não funcionam. Você precisa dos dois.
fonte
ffill
agora tem seu próprio métodopd.DataFrame.ffill
fonte
Apenas uma versão da coluna
fonte
Apenas concordando com o
ffill
método, mas uma informação extra é que você pode limitar o preenchimento direto com o argumento de palavra-chavelimit
.Agora com
limit
argumento de palavra - chavefonte
No meu caso, temos séries temporais de dispositivos diferentes, mas alguns dispositivos não puderam enviar nenhum valor durante algum período. Portanto, devemos criar valores de NA para cada dispositivo e período de tempo e, depois disso, preencher.
Resultado:
fonte
Você pode usar
fillna
para remover ou substituir valores de NaN.NaN Remover
NaN Replace
Referência pandas.DataFrame.fillna
fonte