2017-06-27 3 views
4

Angenommen, ich habe eine Pandas-Serie mit mehreren aufeinander folgenden NaNs. Ich weiß, fillna hat mehrere Methoden, um fehlende Werte (backfill und fill forward) zu füllen, aber ich möchte sie mit dem nächsten nicht NaN-Wert füllen. Hier ist ein Beispiel dafür, was ich habe:Pandas fehlende Werte: fülle mit dem nächsten nicht-NaN-Wert

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

Und ein Beispiel dafür, was ich will: s = pd.Series([0, 1, 1, 1, 3, 3, 3])

Hat jemand weiß, dass ich das tun könnte?

Danke!

+1

Ich bin verwirrt, wie Sie 2s bekamen - wenn Sie den nächsten nicht-NAN-Wert wollen, würden diese nicht 1s sein? – mauve

+0

Enthält die Serie nur einen Teil mit aufeinanderfolgenden NaNs oder könnte es möglicherweise mehrere Teile geben (z. B. '[0, 1, np.nan, np.nan, 2, np.nan, np.nan, 3]')? –

+0

@a_guest Es kann mehrere Teile enthalten –

Antwort

8

Sie könnten Series.interpolate mit method='nearest' verwenden:

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 
Verwandte Themen