Llene los valores de NaN utilizando un método de interpolación.
Tenga en cuenta que solo method='linear'
es compatible con DataFrame / Series con MultiIndex.
- Parámetros
-
- método : str, predeterminado ‘lineal’
-
Técnica de interpolación a utilizar. Uno de:
-
‘lineal’: ignore el índice y trate los valores como si estuvieran espaciados por igual. Este es el único método compatible con MultiIndexes.
-
‘tiempo’: funciona con datos diarios y de mayor resolución para interpolar un intervalo determinado.
-
‘índice’, ‘valores’: utiliza los valores numéricos reales del índice.
-
‘pad’: Complete los NaN con los valores existentes.
-
‘más cercano’, ‘cero’, ‘lineal’, ‘cuadrático’, ‘cúbico’, ‘spline’, ‘baricéntrico’, ‘polinomio’: Pasado a scipy.interpolate.interp1d. Estos métodos utilizan los valores numéricos del índice. Tanto ‘polinomio’ como ‘spline’ requieren que también especifique un pedido (int), p. ej. df.interpolate(method='polynomial',order=5)
.
-
‘krogh’, ‘piecewise_polynomial’, ‘spline’, ‘pchip’, ‘akima’, ‘cubicspline’: envoltorios alrededor de los métodos de interpolación SciPy de nombres similares. Ver Notas.
-
‘from_derivatives’: se refiere a scipy.interpolate.BPoly.from_derivatives que reemplaza el método de interpolación ‘piecewise_polynomial’ en scipy 0.18.
- eje : 0 o ‘índice’, 1 o ‘columnas’, Ninguno, Ninguno predeterminado
-
Eje para interpolar.
- límite : int, opcional
-
Número máximo de NaN consecutivos para completar. Debe ser mayor que 0.
- en su lugar : bool, por defecto Falso
-
Actualice los datos en su lugar si es posible.
- dirección_límite : ‘adelante’, ‘atrás’, ‘ambos’, Opcional
-
Los NaN consecutivos se completarán en esta dirección.
- Si se especifica un límite:
-
-
Si ‘método’ es ‘pad’ o ‘ffill’, ‘limit_direction’ debe ser ‘forward’.
-
Si ‘método’ es ‘backfill’ o ‘bfill’, ‘limit_direction’ debe ser ‘backwards’.
- Si no se especifica ‘límite’:
-
-
Si ‘método’ es ‘reposición’ o ‘bfill’, el valor predeterminado es ‘hacia atrás’
-
de lo contrario, el valor predeterminado es ‘reenviar’
Modificado en la versión 1.1.0: genera ValueError si dirección_límite es ‘forward’ o ‘both’ y el método es ‘backfill’ o ‘bfill’. genera ValueError si dirección_límite es ‘hacia atrás’ o ‘ambos’ y el método es ‘pad’ o ‘ffill’.
- área_límite : Ninguno, ‘interior’, ‘exterior’, Ninguno predeterminado
-
Si se especifica un límite, los NaN consecutivos se llenarán con esta restricción.
-
None
: Sin restricción de llenado.
-
‘inside’: solo rellene los NaN rodeados por valores válidos (interpolar).
-
‘outside’: solo complete los NaN fuera de los valores válidos (extrapolar).
- alicaído : opcional, ‘inferir’ o Ninguno, el valor predeterminado es Ninguno
-
Dtypes abatidos si es posible.
- “ ** kwargs ” : Opcional
-
Argumentos de palabras clave para pasar a la función de interpolación.
- Devoluciones
-
- Serie o DataFrame o Ninguno
-
Devuelve el mismo tipo de objeto que el llamador, interpolado en algunos o todos NaN
valores o Ninguno si inplace=True
.
Ver también
fillna
-
Complete los valores faltantes utilizando diferentes métodos.
scipy.interpolate.Akima1DInterpolator
-
Polinomios cúbicos a trozos (interpolador de Akima).
scipy.interpolate.BPoly.from_derivatives
-
Polinomio a trozos en la base de Bernstein.
scipy.interpolate.interp1d
-
Interpolar una función 1-D.
scipy.interpolate.KroghInterpolator
-
Polinomio de interpolación (interpolador de Krogh).
scipy.interpolate.PchipInterpolator
-
Interpolación cúbica monótona PCHIP 1-d.
scipy.interpolate.CubicSpline
-
Interpolador de datos spline cúbico.
Notas
Los métodos ‘krogh’, ‘piecewise_polynomial’, ‘spline’, ‘pchip’ y ‘akima’ son envoltorios de las respectivas implementaciones SciPy de nombres similares. Estos utilizan los valores numéricos reales del índice. Para obtener más información sobre su comportamiento, consulte la Documentación de SciPy y Tutorial de ciencia ficción.
Ejemplos de
Llenando NaN
en un Series
mediante interpolación lineal.
>>> s = pd.Series([0,1, np.nan,3])>>> s
00.011.02 NaN
33.0
dtype: float64
>>> s.interpolate()00.011.022.033.0
dtype: float64
Llenando NaN
en una serie rellenando, pero llenando como máximo dos NaN
a la vez.
>>> s = pd.Series([np.nan,"single_one", np.nan,..."fill_two_more", np.nan, np.nan, np.nan,...4.71, np.nan])>>> s
0 NaN
1 single_one
2 NaN
3 fill_two_more
4 NaN
5 NaN
6 NaN
74.718 NaN
dtype:object>>> s.interpolate(method='pad', limit=2)0 NaN
1 single_one
2 single_one
3 fill_two_more
4 fill_two_more
5 fill_two_more
6 NaN
74.7184.71
dtype:object
Llenando NaN
en una serie mediante interpolación polinomial o splines: los métodos ‘polinomio’ y ‘spline’ requieren que también especifique un order
(En t).
>>> s = pd.Series([0,2, np.nan,8])>>> s.interpolate(method='polynomial', order=2)00.00000012.00000024.66666738.000000
dtype: float64
Llene el DataFrame hacia adelante (es decir, hacia abajo) a lo largo de cada columna usando interpolación lineal.
Observe cómo la última entrada en la columna ‘a’ se interpola de manera diferente, porque no hay ninguna entrada después de ella para usar para la interpolación. Observe cómo permanece la primera entrada en la columna ‘b’ NaN
, porque no hay una entrada antes que se utilice para la interpolación.
>>> df = pd.DataFrame([(0.0, np.nan,-1.0,1.0),...(np.nan,2.0, np.nan, np.nan),...(2.0,3.0, np.nan,9.0),...(np.nan,4.0,-4.0,16.0)],... columns=list('abcd'))>>> df
a b c d
00.0 NaN -1.01.01 NaN 2.0 NaN NaN
22.03.0 NaN 9.03 NaN 4.0-4.016.0>>> df.interpolate(method='linear', limit_direction='forward', axis=0)
a b c d
00.0 NaN -1.01.011.02.0-2.05.022.03.0-3.09.032.04.0-4.016.0
Usando interpolación polinomial.
>>> df['d'].interpolate(method='polynomial', order=2)01.014.029.0316.0
Name: d, dtype: float64