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.