Puntos clave: Gestionar los datos faltantes en Pandas implica comprender los valores de NaN y utilizar funciones como fillna(), dropna() e interpolate() para una gestión eficaz.
- NaN representa datos perdidos, distintos de ninguno.
- Los métodos incluyen eliminar filas/columnas o rellenar valores adecuadamente.
En ciencia de datos aplicada, normalmente te faltarán datos. Por ejemplo, una aplicación industrial con sensores tendrá datos de sensores que están ausentes en ciertos días.
te un par de alternativas para trabajar con datos que faltan. te pueden:
- Quita toda la fila
- Rellena la combinación fila-columna con algún valor
No tendría Haz de eliminar la columna porque eso eliminaría esa métrica para todas las filas. Así que, veamos cómo manejar estos escenarios.
NaN significa datos perdidos
Los datos que faltan están etiquetados como NaN.
Ten en cuenta que np.nan no están igual a Python None. Ten en cuenta también que np.nan ni siquiera están a np.nan, ya que np.nan básicamente significa indefinido.
Aquí Haz un dataframe con 3 columnas y 3 filas. El array np.arange(1,4) se están copiado en cada fila.
Resultados:
Nat
import pandas as pd
import numpy as np
df = pd.DataFrame([np.arange(1,4)],index=['a','b','c'],
columns=["X","Y","Z"])
Resultados:
Ahora reindexa este array sumando un índice d. Como d no tiene valor, se está rellenado con NaN.
df.reindex(index=['a','b','c','d'])
isna
Ahora utiliza isna para comprobar si falta valores.
pd.isna(df)
Notna
La comprobación opuesta —buscar valores reales— están notna().
pd.notna(df)
NAT significa una fecha perdida.
df['time'] = pd.Timestamp('20211225')
df.loc['d'] = np.nan
Fillna
Aquí podemos rellenar los valores de NaN con el entero 1 usando fillna(1). La columna de fecha no está cambiada ya que el entero 1 no está una fecha.
df=df.fillna(1)
Para solucionar eso, rellena los valores de tiempo vacíos con:
df['time'].fillna(pd.Timestamp('20221225'))
dropna()
dropna() significa dejar filas o columnas cuyo valor están vacío. Otra forma de decir que están mostrar solo filas o columnas que no son vacías.
Aquí rellenamos la fila c con NaN:
df = pd.DataFrame([np.arange(1,4)],index=['a','b','c'],
columns=["X","Y","Z"])
df.loc['c']=np.NaN
Luego pasa dropna sobre el eje de la fila (eje = 0).
df.dropna()
te también podía escribir:
df.dropna(axis=0)
Todas las filas excepto c fueron eliminadas:
Para dejar la columna:
Para dejar la columna:
df = pd.DataFrame([np.arange(1,4)],index=['a','b','c'],
columns=["X","Y","Z"])
df['V']=np.NaN
df.dropna(axis=1)
Otra característica de Pandas están que rellena los valores que faltan usando lo que están lógico.
considera una serie temporal—digamos que te monitoriza alguna máquina y en ciertos días no informa de nada. Debajo informa en Navidad y en cada dos días de esa semana. Luego reindexamos la serie Pandas, creando lagunas en nuestra línea temporal.
import pandas as pd
import numpy as np
arr=np.array([1,2,3])
idx=np.array([pd.Timestamp('20211225'),
pd.Timestamp('20211227'),
pd.Timestamp('20211229')])
df = pd.DataFrame(arr,index=idx)
idx=[pd.Timestamp('20211225'),
pd.Timestamp('20211226'),
pd.Timestamp('20211227'),
pd.Timestamp('20211228'),
pd.Timestamp('20211229')]
df=df.reindex(index=idx)
Interpolar
Utilizamos la función interpolate(). Pandas los rellena bien usando los puntos medios entre los puntos. Por supuesto, si esto fuera curvilíneo, ajustaría una función a eso y encontraría la media de otra manera.
df=df.interpolate()
Eso concluye este tutorial.
Lecturas relacionadas
Guía de Pandas
- Introducción y tutoriales de Pandas para principiantes
- Pandas: Cómo leer archivos CSV y JSON
- Cómo Crea un Dataframe Pandas a partir de un diccionario
- Cómo agrupar, concatenar y fusionar datos en Pandas
- Tipos de datos de Pandas
- Manejo de datos faltantes en Pandas: Explicación de los valores de NaN
- Introducción de NumPy con ejemplos
- Uso de StringIO para leer archivos de texto delimitados en NumPy
- Usando la función estadística NumPy Bincount
- Funciones y distribuciones estadísticas principales de NumPy
Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.