2017-07-18 6 views
4

J'utilise Pandas et Numpy et je suis en train de remplacer toutes les valeurs NaN dans une série comme celle-ci:Remplacer NaN par la valeur la plus proche dans une série d'objets non numériques?

date     a 
2017-04-24 01:00:00 [1,0,0] 
2017-04-24 01:20:00 [1,0,0] 
2017-04-24 01:40:00 NaN 
2017-04-24 02:00:00 NaN 
2017-04-24 02:20:00 [0,1,0] 
2017-04-24 02:40:00 [1,0,0] 
2017-04-24 03:00:00 NaN 
2017-04-24 03:20:00 [0,0,1] 
2017-04-24 03:40:00 NaN 
2017-04-24 04:00:00 [1,0,0] 

avec le plus proche objcet (un tableau numpy dans ce cas). Le résultat est:

date     a 
2017-04-24 01:00:00 [1,0,0] 
2017-04-24 01:20:00 [1,0,0] 
2017-04-24 01:40:00 [1,0,0] 
2017-04-24 02:00:00 [0,1,0] 
2017-04-24 02:20:00 [0,1,0] 
2017-04-24 02:40:00 [1,0,0] 
2017-04-24 03:00:00 [1,0,0] 
2017-04-24 03:20:00 [0,0,1] 
2017-04-24 03:40:00 [0,0,1] 
2017-04-24 04:00:00 [1,0,0] 

Quelqu'un connaît une méthode efficace pour le faire? Merci beaucoup.

Répondre

7

nulls goutte de remblayage puis avec reindex

df.set_index('date').a.dropna().reindex(df.date, method='nearest').reset_index() 

       date   a 
0 2017-04-24 01:00:00 [1, 0, 0] 
1 2017-04-24 01:20:00 [1, 0, 0] 
2 2017-04-24 01:40:00 [1, 0, 0] 
3 2017-04-24 02:00:00 [0, 1, 0] 
4 2017-04-24 02:20:00 [0, 1, 0] 
5 2017-04-24 02:40:00 [1, 0, 0] 
6 2017-04-24 03:00:00 [0, 0, 1] 
7 2017-04-24 03:20:00 [0, 0, 1] 
8 2017-04-24 03:40:00 [1, 0, 0] 
9 2017-04-24 04:00:00 [1, 0, 0] 
+0

C'est ce que je recherche. J'utilise 'df.reset_index()' avant et 'df.set_index (" timestamp ") après votre ligne car' date' est et index, sinon j'ai une erreur de clé sur 'date'. Qu'est-ce que tu penses? – Ghemon