Skip to content

Vous pouvez interpoler les valeurs manquantes ( N๐šโ€ŒN ) dans ๐ฉโ€Œ๐šโ€Œ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ฌโ€Œ.D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ et ๐ฉโ€Œ๐šโ€Œ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ฌโ€Œ.S๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐žโ€Œ๐ฌโ€Œ avec le Mรฉthode ๐ข๐ง๐ž๐ฌ๐ญ๐ž๐ง๐ญ๐ž๐ซ๐ฉ๐จ๐ง๐ญ๐ž๐ง๐ญ() .

Contenu

Consultez l’article suivant sur la suppression, le remplacement et le comptage des valeurs manquantes.

L’exemple de code de cet article utilise la version 2.0.3 de pandas . NumPy est รฉgalement importรฉ.

import pandas as pd import numpy as np print(pd.__version__) # 2.0.3 

Utilisation de base de ๐ขโ€Œ๐งโ€Œ๐ญโ€Œ๐žโ€Œ๐ซโ€Œ๐ฉโ€Œ๐จโ€Œ๐ฅโ€Œ๐šโ€Œ๐ญโ€Œ๐žโ€Œ()

L’exemple suivant ๐ฉโ€Œ๐šโ€Œ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ฌโ€Œ.D๐šโ€Œ๐ญโ€Œ๐šโ€ŒF๐ซโ€Œ๐šโ€Œ๐ฆโ€Œ๐žโ€Œ est utilisรฉ.

df = pd.DataFrame({'col1': [0, np.nan, np.nan, 3, 4], 'col2': [np.nan, 1, 2, np.nan, np.nan], 'col3': [4, np.nan, np.nan, 7, 10]}) print(df) # col1 col2 col3 # 0 0.0 NaN 4.0 # 1 NaN 1.0 NaN # 2 NaN 2.0 NaN # 3 3.0 NaN 7.0 # 4 4.0 NaN 10.0 

Par dรฉfaut, une interpolation linรฉaire est effectuรฉe sur chaque colonne. La mรชme valeur est rรฉpรฉtรฉe pour N๐šโ€ŒN en bas, tandis que N๐šโ€ŒN en haut reste similaire.

print(df.interpolate()) # col1 col2 col3 # 0 0.0 NaN 4.0 # 1 1.0 1.0 5.0 # 2 2.0 2.0 6.0 # 3 3.0 2.0 7.0 # 4 4.0 2.0 10.0 

Ligne ou colonne : ๐šโ€Œ๐ฑโ€Œ๐ขโ€Œ๐ฌโ€Œ

Si ๐šโ€Œ๐ฑโ€Œ๐ขโ€Œ๐ฌโ€Œ=1 , l’interpolation est effectuรฉe sur chaque ligne. La mรชme valeur est rรฉpรฉtรฉe pour le N๐šโ€ŒN le plus ร  droite , tandis que le N๐šโ€ŒN le plus ร  gauche reste inchangรฉ.

print(df.interpolate(axis=1)) # col1 col2 col3 # 0 0.0 2.0 4.0 # 1 NaN 1.0 1.0 # 2 NaN 2.0 2.0 # 3 3.0 5.0 7.0 # 4 4.0 7.0 10.0 

Nombre maximal de N๐šโ€ŒN successions ร  remplir : ๐ฅโ€Œ๐ขโ€Œ๐ฆโ€Œ๐ขโ€Œ๐ญโ€Œ

Vous pouvez utiliser l’argument ๐ฅโ€Œ๐ขโ€Œ๐ฆโ€Œ๐ขโ€Œ๐ญโ€Œ pour spรฉcifier le nombre maximal de valeurs N๐šโ€ŒN consรฉcutives ร  interpoler. Par dรฉfaut, ce paramรจtre est dรฉfini sur N๐จโ€Œ๐งโ€Œ๐žโ€Œ , ce qui signifie que toutes les valeurs N๐šโ€ŒN consรฉcutives seront interpolรฉes.

print(df.interpolate(limit=1)) # col1 col2 col3 # 0 0.0 NaN 4.0 # 1 1.0 1.0 5.0 # 2 NaN 2.0 NaN # 3 3.0 2.0 7.0 # 4 4.0 NaN 10.0 

Direction pour interpoler : ๐ฅโ€Œ๐ขโ€Œ๐ฆโ€Œ๐ขโ€Œ๐ญโ€Œ_๐โ€Œ๐ขโ€Œ๐ซโ€Œ๐žโ€Œ๐œโ€Œ๐ญโ€Œ๐ขโ€Œ๐จโ€Œ๐งโ€Œ

Vous pouvez prรฉciser la direction de l’interpolation avec l’argument ๐ฅโ€Œ๐ขโ€Œ๐ฆโ€Œ๐ขโ€Œ๐ญโ€Œ_๐โ€Œ๐ขโ€Œ๐ซโ€Œ๐žโ€Œ๐œโ€Œ๐ญโ€Œ๐ขโ€Œ๐จโ€Œ๐งโ€Œ , qui peut รชtre dรฉfini sur ‘๐Ÿโ€Œ๐จโ€Œ๐ซโ€Œ๐ฐโ€Œ๐šโ€Œ๐ซโ€Œ๐โ€Œ’ , ‘๐›โ€Œ๐šโ€Œ๐œโ€Œ๐คโ€Œ๐ฐโ€Œ๐šโ€Œ๐ซโ€Œ๐โ€Œ’ , ou ‘๐›๐จ๐ญ๐ข๐ž๐ง’ .

print(df.interpolate(limit=1, limit_direction='forward')) # col1 col2 col3 # 0 0.0 NaN 4.0 # 1 1.0 1.0 5.0 # 2 NaN 2.0 NaN # 3 3.0 2.0 7.0 # 4 4.0 NaN 10.0 print(df.interpolate(limit=1, limit_direction='backward')) # col1 col2 col3 # 0 0.0 1.0 4.0 # 1 NaN 1.0 NaN # 2 2.0 2.0 6.0 # 3 3.0 NaN 7.0 # 4 4.0 NaN 10.0 print(df.interpolate(limit=1, limit_direction='both')) # col1 col2 col3 # 0 0.0 1.0 4.0 # 1 1.0 1.0 5.0 # 2 2.0 2.0 6.0 # 3 3.0 2.0 7.0 # 4 4.0 NaN 10.0 

Comme mentionnรฉ ci-dessus, par dรฉfaut, les valeurs N๐šโ€ŒN supรฉrieures (ou les plus ร  gauche) restent prรฉsentes. Cependant, le rรฉglage ๐ฅโ€Œ๐ขโ€Œ๐ฆโ€Œ๐ขโ€Œ๐ญโ€Œ_๐โ€Œ๐ขโ€Œ๐ซโ€Œ๐žโ€Œ๐œ โ€Œ๐ญโ€Œ๐ขโ€Œ๐จโ€Œ๐งโ€Œ=’๐›โ€Œ๐จโ€Œ๐ญโ€Œ๐กโ€Œ’ permet l’interpolation aux deux extrรฉmitรฉs.

print(df.interpolate(limit_direction='both')) # col1 col2 col3 # 0 0.0 1.0 4.0 # 1 1.0 1.0 5.0 # 2 2.0 2.0 6.0 # 3 3.0 2.0 7.0 # 4 4.0 2.0 10.0 

Interpoler ou extrapoler ou les deux : ๐ฅโ€Œ๐ขโ€Œ๐ฆโ€Œ๐ขโ€Œ๐ญโ€Œ_๐šโ€Œ๐ซโ€Œ๐žโ€Œ๐šโ€Œ

Vous pouvez dรฉfinir la zone ร  interpoler avec l’argument ๐ฅโ€Œ๐ขโ€Œ๐ฆโ€Œ๐ขโ€Œ๐ญโ€Œ_๐šโ€Œ๐ซโ€Œ๐žโ€Œ๐šโ€Œ .

  • ‘๐ขโ€Œ๐งโ€Œ๐ฌโ€Œ๐ขโ€Œ๐โ€Œ๐žโ€Œ’ : Interpolation uniquement
  • ‘๐จ๐ฎโ€Œ๐ญโ€Œ๐ฌโ€Œ๐ขโ€Œ๐โ€Œ๐žโ€Œ’ : uniquement une extrapolation
  • N๐จโ€Œ๐งโ€Œ๐žโ€Œ (par dรฉfaut) : interpolation et extrapolation
print(df.interpolate(limit_area='inside')) # col1 col2 col3 # 0 0.0 NaN 4.0 # 1 1.0 1.0 5.0 # 2 2.0 2.0 6.0 # 3 3.0 NaN 7.0 # 4 4.0 NaN 10.0 print(df.interpolate(limit_area='outside')) # col1 col2 col3 # 0 0.0 NaN 4.0 # 1 NaN 1.0 NaN # 2 NaN 2.0 NaN # 3 3.0 2.0 7.0 # 4 4.0 2.0 10.0 print(df.interpolate(limit_area='outside', limit_direction='both')) # col1 col2 col3 # 0 0.0 1.0 4.0 # 1 NaN 1.0 NaN # 2 NaN 2.0 NaN # 3 3.0 2.0 7.0 # 4 4.0 2.0 10.0 

Notez que le terme ยซ extrapolation ยป est utilisรฉ ici pour des raisons pratiques. Pour l’interpolation linรฉaire (par dรฉfaut), les valeurs extรฉrieures ne sont que des rรฉpรฉtitions des valeurs finales, et ne sont pas vรฉritablement extrapolรฉes. Cependant, dans l’interpolation spline dรฉcrite ci-dessous, les valeurs extรฉrieures sont vรฉritablement extrapolรฉes.

Opรฉrer sur place : ๐ขโ€Œ๐งโ€Œ๐ฉโ€Œ๐ฅโ€Œ๐šโ€Œ๐œโ€Œ๐žโ€Œ

Comme de nombreuses autres mรฉthodes, vous pouvez modifier directement l’objet d’origine en dรฉfinissant ๐ขโ€Œ๐งโ€Œ๐ฉโ€Œ๐ฅโ€Œ๐šโ€Œ๐œโ€Œ๐žโ€Œ=T๐ซโ€Œ๐ฎโ€Œ๐žโ€Œ .

df.interpolate(inplace=True) print(df) # col1 col2 col3 # 0 0.0 NaN 4.0 # 1 1.0 1.0 5.0 # 2 2.0 2.0 6.0 # 3 3.0 2.0 7.0 # 4 4.0 2.0 10.0 

Mรฉthode d’interpolation : ๐ฆโ€Œ๐žโ€Œ๐ญโ€Œ๐กโ€Œ๐จโ€Œ๐โ€Œ

La mรฉthode d’interpolation est spรฉcifiรฉe par le premier argument ๐ฆโ€Œ๐žโ€Œ๐ญโ€Œ๐กโ€Œ๐จโ€Œ๐โ€Œ . La valeur par dรฉfaut est ‘๐ฅโ€Œ๐ขโ€Œ๐งโ€Œ๐žโ€Œ๐šโ€Œ๐ซโ€Œ’ (interpolation linรฉaire).

Interpolation linรฉaire : ๐ฅโ€Œ๐ขโ€Œ๐งโ€Œ๐žโ€Œ๐šโ€Œ๐ซโ€Œ , ๐ขโ€Œ๐งโ€Œ๐โ€Œ๐žโ€Œ๐ฑโ€Œ , ๐ฏโ€Œ๐šโ€Œ๐ฅโ€Œ๐ฎโ€Œ๐žโ€Œ๐ฌโ€Œ

Avec ๐ฆโ€Œ๐žโ€Œ๐ญโ€Œ๐กโ€Œ๐จโ€Œ๐โ€Œ=’๐ฅโ€Œ๐ขโ€Œ๐งโ€Œ๐žโ€Œ๐šโ€Œ๐ซโ€Œ’ (par dรฉfaut), l’index est ignorรฉ, mais avec ๐ฆโ€Œ๐žโ€Œ๐ญโ€Œ๐กโ€Œ๐จโ€Œ๐โ€Œ=’๐ขโ€Œ๐งโ€Œ๐โ€Œ๐žโ€Œ๐ฑโ€Œ’ ou ๐ฆโ€Œ๐žโ€Œ๐ญโ€Œ๐กโ€Œ๐จโ€Œ๐โ€Œ=’๐ฏโ€Œ๐šโ€Œ๐ฅโ€Œ๐ฎโ€Œ๐žโ€Œ๐ฌโ€Œ’ , il est interpolรฉ ร  l’aide de la valeur d’index.

s = pd.Series([0, np.nan, np.nan, 3], index=[0, 4, 6, 8]) print(s) # 0 0.0 # 4 NaN # 6 NaN # 8 3.0 # dtype: float64 print(s.interpolate()) # 0 0.0 # 4 1.0 # 6 2.0 # 8 3.0 # dtype: float64 print(s.interpolate('index')) # 0 0.00 # 4 1.50 # 6 2.25 # 8 3.00 # dtype: float64 

Si la colonne d’index contient des chaรฎnes, ๐ฆโ€Œ๐žโ€Œ๐ญโ€Œ๐กโ€Œ๐จโ€Œ๐โ€Œ=’๐ฅโ€Œ๐ขโ€Œ๐งโ€Œ๐žโ€Œ๐šโ€Œ๐ซโ€Œ’ (par dรฉfaut) fonctionne correctement, mais si ๐ฆโ€Œ๐žโ€Œ๐ญโ€Œ๐กโ€Œ๐จโ€Œ๐โ€Œ est dรฉfini sur ‘๐ขโ€Œ๐งโ€Œ๐โ€Œ๐žโ€Œ๐ฑโ€Œ’ ou ‘๐ฏโ€Œ๐šโ€Œ๐ฅโ€Œ๐ฎโ€Œ๐žโ€Œ๐ฌโ€Œ’ , une erreur est fournir.

s.index = list('abcd') print(s) # a 0.0 # b NaN # c NaN # d 3.0 # dtype: float64 print(s.interpolate()) # a 0.0 # b 1.0 # c 2.0 # d 3.0 # dtype: float64 # print(s.interpolate('index')) # TypeError: Cannot cast array data from dtype('O') to dtype('float64') according to the rule 'safe' 

Utilisation des valeurs existantes : ๐Ÿโ€Œ๐Ÿโ€Œ๐ขโ€Œ๐ฅโ€Œ๐ฅโ€Œ , ๐ฉโ€Œ๐šโ€Œ๐โ€Œ , ๐›โ€Œ๐Ÿโ€Œ๐ขโ€Œ๐ฅโ€Œ๐ฅโ€Œ , ๐›โ€Œ๐šโ€Œ๐œโ€Œ๐คโ€Œ๐Ÿโ€Œ๐ขโ€Œ๐ฅโ€Œ๐ฅโ€Œ

Les valeurs N๐šโ€ŒN sont remplies avec la valeur existante prรฉcรฉdente si ๐ฆโ€Œ๐žโ€Œ๐ญโ€Œ๐กโ€Œ๐จโ€Œ๐โ€Œ=’๐Ÿโ€Œ๐Ÿโ€Œ๐ขโ€Œ๐ฅโ€Œ๐ฅโ€Œ’ ou ๐ฆโ€Œ๐žโ€Œ๐ญโ€Œ๐กโ€Œ๐จโ€Œ๐โ€Œ=’๐ฉโ€Œ๐šโ€Œ๐โ€Œ’ , ou avec la valeur existante suivante si ๐ฆโ€Œ๐žโ€Œ๐ญโ€Œ๐กโ€Œ๐จโ€Œ๐โ€Œ=’๐›โ€Œ๐šโ€Œ๐œโ€Œ๐คโ€Œ๐Ÿโ€Œ๐ขโ€Œ๐ฅโ€Œ๐ฅโ€Œ’ ou ๐ฆโ€Œ๐žโ€Œ๐ญโ€Œ๐กโ€Œ๐จโ€Œ๐โ€Œ=’๐›โ€Œ๐šโ€Œ๐œโ€Œ๐คโ€Œ๐Ÿโ€Œ๐ขโ€Œ๐ฅโ€Œ๐ฅโ€Œ’ .

s = pd.Series([np.nan, 1, np.nan, 2, np.nan]) print(s) # 0 NaN # 1 1.0 # 2 NaN # 3 2.0 # 4 NaN # dtype: float64 print(s.interpolate('ffill')) # 0 NaN # 1 1.0 # 2 1.0 # 3 2.0 # 4 2.0 # dtype: float64 print(s.interpolate('bfill')) # 0 1.0 # 1 1.0 # 2 2.0 # 3 2.0 # 4 NaN # dtype: float64 

Le ๐ฅโ€Œ๐ขโ€Œ๐ฆโ€Œ๐ขโ€Œ๐ญโ€Œ_๐โ€Œ๐ขโ€Œ๐ซโ€Œ๐žโ€Œ๐œโ€Œ๐ญโ€Œ๐ขโ€Œ๐จโ€Œ๐งโ€Œ doit รชtre dรฉfini sur ยซ ๐Ÿโ€Œ๐จโ€Œ๐ซโ€Œ๐ฐโ€Œ๐šโ€Œ๐ซโ€Œ๐โ€Œ ยป si ๐ฆโ€Œ๐žโ€Œ๐ญโ€Œ๐กโ€Œ๐จโ€Œ๐โ€Œ est dรฉfini sur ยซ ๐Ÿโ€Œ๐Ÿโ€Œ๐ขโ€Œ๐ฅโ€Œ๐ฅโ€Œ ยป ou ‘๐ฉโ€Œ๐šโ€Œ๐โ€Œ’ et ร  ‘๐›โ€Œ๐šโ€Œ๐œโ€Œ๐คโ€Œ๐ฐโ€Œ๐šโ€Œ๐ซโ€Œ๐โ€Œ’ si ๐ฆโ€Œ๐žโ€Œ๐ญโ€Œ๐กโ€Œ๐จโ€Œ๐โ€Œ est dรฉfini sur ‘๐›โ€Œ๐Ÿโ€Œ๐ขโ€Œ๐ฅโ€Œ๐ฅโ€Œ’ ou ‘๐›โ€Œ๐šโ€Œ๐œโ€Œ๐คโ€Œ๐Ÿโ€Œ๐ขโ€Œ๐ฅโ€Œ๐ฅโ€Œ’ .

# s.interpolate('ffill', limit_direction='both') # ValueError: `limit_direction` must be 'forward' for method `ffill` # s.interpolate('bfill', limit_direction='both') # ValueError: `limit_direction` must be 'backward' for method `bfill` 

Vous pouvez faire la mรชme chose avec la mรฉthode ๐Ÿโ€Œ๐ขโ€Œ๐ฅโ€Œ๐ฅโ€Œ๐งโ€Œ๐šโ€Œ() avec l’argument ๐ฆโ€Œ๐žโ€Œ๐ญโ€Œ๐กโ€Œ๐จโ€Œ๐โ€Œ .

print(s.fillna(method='ffill')) # 0 NaN # 1 1.0 # 2 1.0 # 3 2.0 # 4 2.0 # dtype: float64 print(s.fillna(method='bfill')) # 0 1.0 # 1 1.0 # 2 2.0 # 3 2.0 # 4 NaN # dtype: float64 

Spline d’interpolation : ๐ฌ๐จ๐ฎ๐ฌ๐ฌ๐ข๐ž๐ง ๐ž๐ฌ๐ญ ๐ฉ๐š๐ซ๐ญ๐ž๐ง

Si ๐ฆโ€Œ๐žโ€Œ๐ญโ€Œ๐กโ€Œ๐จโ€Œ๐โ€Œ=’๐ฌโ€Œ๐ฉโ€Œ๐ฅโ€Œ๐ขโ€Œ๐งโ€Œ๐žโ€Œ’ , l’interpolation spline est effectuรฉe. Vous devez prรฉciser l’argument ๐จโ€Œ๐ซโ€Œ๐โ€Œ๐žโ€Œ๐ซโ€Œ .

s = pd.Series([0, 10, np.nan, np.nan, 4, np.nan], index=[0, 2, 5, 6, 8, 12]) print(s) # 0 0.0 # 2 10.0 # 5 NaN # 6 NaN # 8 4.0 # 12 NaN # dtype: float64 print(s.interpolate('spline', order=2)) # 0 0.00 # 2 10.00 # 5 13.75 # 6 12.00 # 8 4.00 # 12 -30.00 # dtype: float64 

L’interpolation spline dรฉpend toujours de l’index, donc toute modification de l’index modifiera en consรฉquence les rรฉsultats.

s.index = range(6) print(s) # 0 0.0 # 1 10.0 # 2 NaN # 3 NaN # 4 4.0 # 5 NaN # dtype: float64 print(s.interpolate('spline', order=2)) # 0 0.0 # 1 10.0 # 2 14.0 # 3 12.0 # 4 4.0 # 5 -10.0 # dtype: float64 

Par consรฉquent, l’interpolation spline nรฉcessite que l’index soit numรฉrique. S’il s’agit de chaรฎnes, une erreur est gรฉnรฉrรฉe.

s.index = list('abcdef') print(s) # a 0.0 # b 10.0 # c NaN # d NaN # e 4.0 # f NaN # dtype: float64 # print(s.interpolate('spline', order=2)) # ValueError: Index column must be numeric or datetime type when using spline method other than linear. # Try setting a numeric or datetime index column before interpolating. 

Autres

Il existe d’autres mรฉthodes d’interpolation qui peuvent รชtre spรฉcifiques pour l’ argument , ‘๐ณโ€Œ๐žโ€Œ๐ซโ€Œ๐จโ€Œ’ , โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹โ€‹’๐ฌโ€Œ๐ฅโ€Œ๐ขโ€Œ๐งโ€Œ๐žโ€Œ๐šโ€Œ๐ซโ€Œ’ , ๐ซโ€Œ๐šโ€Œ๐ญโ€Œ๐ขโ€Œ๐œ ‘, ๐š๐ฎ๐ญ๐ซ๐จ๐ข๐ฌ๐ฌ๐ข , ‘๐ฉ๐จ๐ฅโ€Œ๐ฒโ€Œ๐งโ€Œ๐จโ€Œ๐ฆโ€Œ๐ขโ€Œ๐šโ€Œ๐ฅโ€Œ’ , ‘๐ฉ๐ขโ€Œ๐žโ€Œ๐œโ€Œ๐žโ€Œ๐ฐโ€Œ๐ขโ€Œ๐ฌโ€Œ๐žโ€Œ_๐ฉโ€Œ๐จโ€Œ๐ฅโ€Œ๐ฒโ€Œ๐งโ€Œ๐จโ€Œ๐ฆโ€Œ๐ขโ€Œ๐šโ€Œ๐ฅโ€Œ’ , ‘๐Ÿ๐ซโ€Œ๐จโ€Œ๐ฆโ€Œ_๐โ€Œ๐žโ€Œ๐ซโ€Œ๐ขโ€Œ๐ฏโ€Œ๐šโ€Œ๐ญโ€Œ๐ขโ€Œ๐ฏโ€Œ๐žโ€Œ๐ฌ’ , ‘๐š๐ฎ๐ญ๐ข๐ฆ๐ž๐ง๐ญ’ , ‘๐š๐ฎ๐ญ’ .

Comme mentionnรฉ dans la documentation officielle, ce sont des wrappers pour les fonctions SciPy, y compris l’interpolation spline ( ‘๐ฌโ€Œ๐ฉโ€Œ๐ฅโ€Œ๐ขโ€Œ๐งโ€Œ๐žโ€Œ’ ) mentionnรฉe ci-dessus.

Dans toutes ces mรฉthodes, l’index doit รชtre numรฉrique, tout comme dans l’interpolation spline.

Pour les donnรฉes de sรฉries chronologiques

๐ฆโ€Œ๐žโ€Œ๐ญโ€Œ๐กโ€Œ๐จโ€Œ๐โ€Œ=’๐ญโ€Œ๐ขโ€Œ๐ฆโ€Œ๐žโ€Œ’ est fourni pour les donnรฉes de sรฉries chronologiques. Dans le cas de ๐ฆโ€Œ๐žโ€Œ๐ญโ€Œ๐กโ€Œ๐จโ€Œ๐โ€Œ=’๐ญโ€Œ๐ขโ€Œ๐ฆโ€Œ๐žโ€Œ’ , l’interpolation linรฉaire est effectuรฉe en fonction de la date et de l’heure de la colonne d’index.

df_nan = pd.DataFrame({'value': [1, np.nan, np.nan, np.nan, 31]}, index=pd.to_datetime(['2018-01-01', '2018-01-02', '2018-01-15', '2018-01-20', '2018-01-31'])) print(df_nan) # value # 2018-01-01 1.0 # 2018-01-02 NaN # 2018-01-15 NaN # 2018-01-20 NaN # 2018-01-31 31.0 print(df_nan.interpolate()) # value # 2018-01-01 1.0 # 2018-01-02 8.5 # 2018-01-15 16.0 # 2018-01-20 23.5 # 2018-01-31 31.0 print(df_nan.interpolate('time')) # value # 2018-01-01 1.0 # 2018-01-02 2.0 # 2018-01-15 15.0 # 2018-01-20 20.0 # 2018-01-31 31.0 

Dans le cas oรน le type de donnรฉes ( ๐โ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ ) est ๐จโ€Œ๐›โ€Œ๐ฃโ€Œ๐žโ€Œ๐œโ€Œ๐ญโ€Œ

Par exemple, le type de donnรฉes ( ๐โ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ ) d’une colonne contenant un รฉlรฉment de chaรฎne est ๐จโ€Œ๐›โ€Œ๐ฃโ€Œ๐žโ€Œ๐œโ€Œ๐ญโ€Œ .

s_object = pd.Series(['A', np.nan, 'C']) print(s_object) # 0 A # 1 NaN # 2 C # dtype: object 

La colonne ๐จโ€Œ๐›โ€Œ๐ฃโ€Œ๐žโ€Œ๐œโ€Œ๐ญโ€Œ n’est pas interpolรฉe par ๐ฆโ€Œ๐žโ€Œ๐ญโ€Œ๐กโ€Œ๐จโ€Œ๐โ€Œ=’๐ฅโ€Œ๐ขโ€Œ๐งโ€Œ๐žโ€Œ๐šโ€Œ๐ซโ€Œ’ (par dรฉfaut) ou d’autres mรฉthodes. Il peut รชtre rempli par des mรฉthodes telles que ๐Ÿโ€Œ๐Ÿโ€Œ๐ขโ€Œ๐ฅโ€Œ๐ฅโ€Œ , ๐ฉโ€Œ๐šโ€Œ๐โ€Œ , ๐›โ€Œ๐Ÿโ€Œ๐ขโ€Œ๐ฅโ€Œ๐ฅโ€Œ et ๐›โ€Œ๐šโ€Œ๐œโ€Œ๐คโ€Œ๐Ÿโ€Œ๐ขโ€Œ๐ฅโ€Œ๐ฅโ€Œ , qui utilise les valeurs existantes.

print(s_object.interpolate()) # 0 A # 1 NaN # 2 C # dtype: object print(s_object.interpolate('ffill')) # 0 A # 1 A # 2 C # dtype: object 

Il en va de mรชme si l’รฉlรฉment est un nombre mais que le type de donnรฉes est ๐จโ€Œ๐›โ€Œ๐ฃโ€Œ๐žโ€Œ๐œโ€Œ๐ญโ€Œ .

s_object_num = pd.Series([0, np.nan, 2], dtype=object) print(s_object_num) # 0 0 # 1 NaN # 2 2 # dtype: object print(s_object_num.interpolate()) # 0 0 # 1 NaN # 2 2 # dtype: object print(s_object_num.interpolate('ffill')) # 0 0 # 1 0 # 2 2 # dtype: int64 

Si vous le convertissez en ๐Ÿโ€Œ๐ฅโ€Œ๐จโ€Œ๐šโ€Œ๐ญโ€Œ avec ๐šโ€Œ๐ฌโ€Œ๐ญโ€Œ๐ฒโ€Œ๐ฉโ€Œ๐žโ€Œ() , vous pouvez effectuer une interpolation. Notez qu’il ne peut pas รชtre converti en ๐ขโ€Œ๐งโ€Œ๐ญโ€Œ s’il contient N๐šโ€ŒN .

print(s_object_num.astype(float).interpolate()) # 0 0.0 # 1 1.0 # 2 2.0 # dtype: float64 # print(s_object_num.astype(int)) # ValueError: cannot convert float NaN to integer