2017-06-27 4 views
4

Supposons que j'ai une série de pandas avec plusieurs NaN consécutifs. Je sais fillna a plusieurs méthodes pour remplir les valeurs manquantes (backfill et fill forward), mais je veux les remplir avec la valeur non NaN le plus proche. Voici un exemple de ce que j'ai:Valeurs manquantes de Pandas: remplir avec la valeur non NaN la plus proche

`s = pd.Series([0, 1, np.nan, np.nan, np.nan, np.nan, 3])` 

Et un exemple de ce que je veux: s = pd.Series([0, 1, 1, 1, 3, 3, 3])

Est-ce que quelqu'un sait que je pourrais le faire?

Merci!

+1

Je suis confus quant à la façon dont vous avez 2s - si vous voulez que la valeur la plus proche non-NAN, ne serait pas ceux 1s être? – mauve

+0

La série contient-elle seulement une partie avec des NaN consécutifs ou pourrait-il y avoir plusieurs parties (par exemple '[0, 1, np.nan, np.nan, 2, np.nan, np.nan, 3]')? –

+0

@a_guest Peut contenir plusieurs parties –

Répondre

8

Vous pouvez utiliser Series.interpolate avec method='nearest':

In [11]: s = pd.Series([0, 1, np.nan, np.nan, np.nan, np.nan, 3]) 

In [12]: s.interpolate(method='nearest') 
Out[12]: 
0 0.0 
1 1.0 
2 1.0 
3 1.0 
4 3.0 
5 3.0 
6 3.0 
dtype: float64 

In [13]: s = pd.Series([0, 1, np.nan, np.nan, 2, np.nan, np.nan, 3]) 

In [14]: s.interpolate(method='nearest') 
Out[14]: 
0 0.0 
1 1.0 
2 1.0 
3 2.0 
4 2.0 
5 2.0 
6 3.0 
7 3.0 
dtype: float64