API · Pandas
Pandas DataFrame DataFrame.interpolate() Función
La función DataFrame interpolate() rellena los valores de NaN en el DataFrame mediante la técnica de interpolación.
En esta página
La función de Python Pandas DataFrame.interpolate() estima los valores que faltan a partir de los valores vecinos a lo largo de un eje elegido. Puede completar un intervalo interior cuando hay valores utilizables a ambos lados; algunos valores pueden seguir faltando si los datos no aportan información suficiente. (NaN)
Sintaxis y parámetros de pandas.DataFrame.interpolate()
La llamada al método tiene esta forma general:
DataFrame.interpolate(method="linear", axis=0, limit=None, inplace=False, limit_direction="forward", limit_area=None, **kwargs)
Los ejemplos usan DataFrames numéricos pequeños para que puedas adaptar las entradas a tus propios datos.
| Parámetro | Qué controla |
|---|---|
method |
El método de interpolación. Este artículo aborda el método predeterminado linear y time; consulta la documentación de la API de pandas para conocer las opciones compatibles con la versión que tienes instalada. |
axis |
La dirección de la interpolación: 0 recorre las filas dentro de cada columna, mientras que 1 recorre las columnas dentro de cada fila. |
limit |
El número máximo de valores consecutivos que se rellenan en un intervalo. |
limit_direction |
Junto con limit, permite elegir si el relleno avanza desde el inicio ("forward"), desde el final ("backward") o desde ambos extremos ("both") del intervalo. |
inplace |
Si es True, modifica el DataFrame original. El valor predeterminado es False. |
limit_area |
Restricción opcional sobre dónde se rellenan los valores cuando se establece limit. No se utiliza en estos ejemplos. |
**kwargs |
Argumentos de palabra clave adicionales que acepta el método de interpolación elegido. Su significado depende de ese método. |
Interpolar los valores que faltan con el método predeterminado
Con el valor predeterminado method="linear", pandas estima los valores suponiendo que las posiciones a lo largo del eje seleccionado están espaciadas uniformemente. En el ejemplo, el valor entre 10 y 30 se estima como 20, y el valor que falta al final se completa con 30.0 al propagar hacia delante el último valor conocido.
Ejecuta este ejemplo:
import pandas as pd
df = pd.DataFrame({"temperature": [10.0, None, 30.0, None]})
result = df.interpolate()
print(result)
temperature
0 10.0
1 20.0
2 30.0
3 30.0
Usa la interpolación cuando quieras estimar el valor que falta a partir de observaciones cercanas. pandas.DataFrame.fillna() sustituye los valores que faltan por un valor elegido u otra estrategia de relleno especificada. La operación adecuada depende de los datos y de la tarea.
Elegir un método de interpolación
Deja method con su valor predeterminado para mediciones numéricas ordinarias cuyas posiciones de fila están espaciadas uniformemente. En un DataFrame con índice temporal, method="time" utiliza los intervalos de tiempo representados por el índice para estimar los valores. Es útil cuando las observaciones no están espaciadas uniformemente en el tiempo. El ejemplo temporal que aparece más adelante muestra la estructura de índice necesaria.
Los métodos disponibles y sus requisitos pueden variar según la versión de pandas. Consulta la documentación de la API correspondiente a tu versión antes de elegir otro método o pasar argumentos de palabra clave específicos del método.
Elegir el eje de interpolación
El valor predeterminado axis=0 rellena hacia abajo cada columna. Establece axis=1 para rellenar las columnas dentro de cada fila. Por ejemplo, con axis=1, un valor que falta entre 10 y 30 en una fila se estima como 20. Si una fila no contiene valores conocidos, la interpolación no tiene datos de los que obtener una estimación y deja sus entradas sin completar.
import pandas as pd
df = pd.DataFrame(
{"morning": [10.0, None], "afternoon": [None, None], "evening": [30.0, None]},
dtype="float64",
)
print(df.interpolate(axis=1))
morning afternoon evening
0 10.0 20.0 30.0
1 NaN NaN NaN
El tipo numérico explícito también mantiene como numérica una columna cuyos valores faltan todos, por lo que la interpolación a lo largo de la fila funciona. En este ejemplo con axis=1, el espaciado lineal depende de las posiciones de las columnas, no de sus nombres.
Limitar los valores consecutivos que faltan y establecer su dirección
Establece limit para limitar cuántas entradas consecutivas que faltan completa pandas en cada intervalo. limit_direction controla la dirección del relleno junto con ese límite. En un intervalo de tres valores entre 0 y 40, limit=1 con relleno hacia delante completa la primera posición que falta desde arriba; con relleno hacia atrás, completa la última posición desde abajo. Las demás posiciones siguen sin completarse.
import pandas as pd
df = pd.DataFrame({"reading": [0.0, None, None, None, 40.0]})
print("Forward:")
print(df.interpolate(limit=1, limit_direction="forward"))
print("Backward:")
print(df.interpolate(limit=1, limit_direction="backward"))
Forward:
reading
0 0.0
1 10.0
2 NaN
3 NaN
4 40.0
Backward:
reading
0 0.0
1 NaN
2 NaN
3 30.0
4 40.0
Usa limit_direction="both" cuando sea adecuado rellenar desde ambos extremos y revisa los datos resultantes si el intervalo supera el límite.
Interpolar valores en datos con índice temporal
Para interpolar según el tiempo, usa un DatetimeIndex de modo que las fechas y el tiempo transcurrido formen parte de los valores del índice, en lugar de ser cadenas de texto en una columna normal. El 2 de enero está a un tercio de la distancia temporal entre el 1 y el 4 de enero. Por tanto, el valor interpolado queda a un tercio de la distancia entre 10 y 30, lo que da 16.666667.
import pandas as pd
index = pd.to_datetime(["2024-01-01", "2024-01-02", "2024-01-04"])
df = pd.DataFrame({"value": [10.0, None, 30.0]}, index=index)
print(df.interpolate(method="time"))
value
2024-01-01 10.000000
2024-01-02 16.666667
2024-01-04 30.000000
Conserva el índice de fecha y hora al interpolar según el tiempo; convertir las fechas en una columna de texto normal no proporciona el espaciado temporal que utiliza el método.
Valor de retorno y comportamiento en el propio objeto
De forma predeterminada, DataFrame.interpolate() devuelve un DataFrame nuevo con el resultado de la interpolación y deja intacto el objeto original. Con inplace=True, modifica el DataFrame original y devuelve None; por eso, asigna el resultado solo cuando uses el comportamiento predeterminado.
import pandas as pd
df = pd.DataFrame({"reading": [1.0, None, 3.0]})
result = df.interpolate(inplace=True)
print(result)
print(df)
reading
0 1.0
1 2.0
2 3.0
reading
0 1.0
1 2.0
2 3.0
El primer valor impreso es None; el segundo es el DataFrame modificado. Las etiquetas impresas que aparezcan en el bloque de ejemplo se conservan en inglés porque ese bloque no se modifica.