Supongamos que tengo un DataFrame con algunos 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
Lo que necesito hacer es reemplazar cada uno NaN
con el primer no NaN
valor en la misma columna sobre él. Se supone que la primera fila nunca contendrá a NaN
. Entonces, para el ejemplo anterior, el resultado sería
0 1 2
0 1 2 3
1 4 2 3
2 4 2 9
Solo puedo recorrer todo el DataFrame columna por columna, elemento por elemento y establecer los valores directamente, pero ¿hay una manera fácil (óptimamente libre de bucles) de lograr esto?
Puedes usar
pandas.DataFrame.fillna
con lamethod='ffill'
opción.'ffill'
significa 'relleno hacia adelante' y propagará la última observación válida hacia adelante. La alternativa es'bfill'
que funciona de la misma manera, pero al revés.También hay una función de sinónimo directo para esto
pandas.DataFrame.ffill
, para simplificar las cosas.fuente
Una cosa que noté al probar esta solución es que si tiene N / A al comienzo o al final de la matriz, ffill y bfill no funcionan del todo. Necesitas ambos.
fuente
ffill
ahora tiene su propio métodopd.DataFrame.ffill
fuente
Solo una versión de columna
fuente
Simplemente estoy de acuerdo con el
ffill
método, pero una información adicional es que puede limitar el relleno hacia adelante con el argumento de la palabra clavelimit
.Ahora con
limit
argumento de palabra clavefuente
En mi caso, tenemos series temporales de diferentes dispositivos, pero algunos dispositivos no pudieron enviar ningún valor durante algún período. Por lo tanto, deberíamos crear valores de NA para cada dispositivo y período de tiempo, y después de eso debemos completar.
Resultado:
fuente
Puede usar
fillna
para eliminar o reemplazar valores de NaN.NaN Eliminar
NaN Reemplazar
Referencia pandas.DataFrame.fillna
fuente