2017-08-14 1 views
-1

Voici mes données CadreApplication du remplissage avant sur les NaN en haut d'une colonne à l'aide de df.fillna?

Id_Student English History Mathmatic 

1 66.0 NaN   80.0 
2 NaN  66.0  NaN 
3 NaN  NaN   NaN 
4 55.0 94.0  94.0 

Je veux utiliser cette Methode pour fixer la valeur manquante

mdf1 = mdf.fillna(method='ffill') 

Mais il semble que si la première valeur est NaN ce n'est pas aider beaucoup. Première valeur dans la colonne Histoire encore NaN

Id_Student English History Mathmatic 

1  66.0  NaN  80.0 
2  66.0  66.0  80.0 
3  66.0  66.0  80.0 
4  55.0  94.0  94.0 
5  55.0  85.0  85.0 

Toute idée de résoudre ce genre de problème Cheers mate

+1

Toute idée de ce que vous voulez le remplir avec? –

+0

mdf.fillna (method = 'ffill'), Fondamentalement, cette méthode prend la valeur immédiate pour remplir la valeur manquante. Je ne veux pas remplir la valeur manquante par la moyenne ou quelque chose d'autre. wanna use this one.df.fillna (method = 'ffill') –

+0

De toute évidence, 'ffill' ne peut pas remplir quelque chose au début, car il n'y a rien à avancer. Mais vous pouvez utiliser 'bfill' à la place. –

Répondre

0

je pense que ce comportement est normal, parce que ffill remplacer NaN par le remplissage en avant et si aucune valeur en première ligne , puis obtenez NaNs uniquement à la première valeur non NaN.

Vous pouvez utiliser un autre fillna pour remplacer NaNs qui ne peut être remplacé par ffill:

mdf1 = mdf.ffill().fillna(0) 
#same as 
#mdf1 = mdf.fillna(method='ffill').fillna(0) 

Même problème est avec bfill (remblayer) et les valeurs de NaN en dernière ligne, puis il est possible d'ajouter fillna ou d'une autre méthode:

print (mdf) 
    Id_Student English History Mathmatic 
0   1  66.0  NaN  NaN 
1   2  NaN  66.0  NaN 
2   3  NaN  NaN  NaN 
3   4  55.0  94.0  94.0 
4   5  NaN  10.0  NaN 
5   6  NaN  NaN  20.0 

print (mdf.ffill()) 
    Id_Student English History Mathmatic 
0   1  66.0  NaN  NaN 
1   2  66.0  66.0  NaN 
2   3  66.0  66.0  NaN 
3   4  55.0  94.0  94.0 
4   5  55.0  10.0  94.0 
5   6  55.0  10.0  20.0 

print (mdf.bfill()) 
    Id_Student English History Mathmatic 
0   1  66.0  66.0  94.0 
1   2  55.0  66.0  94.0 
2   3  55.0  94.0  94.0 
3   4  55.0  94.0  94.0 
4   5  NaN  10.0  20.0 
5   6  NaN  NaN  20.0 

Remplacer par scalaire tous NaN:

mdf1 = mdf.ffill().fillna(0) 
print (mdf1) 
    Id_Student English History Mathmatic 
0   1  66.0  0.0  0.0 
1   2  66.0  66.0  0.0 
2   3  66.0  66.0  0.0 
3   4  55.0  94.0  94.0 
4   5  55.0  10.0  94.0 
5   6  55.0  10.0  20.0 


mdf1 = mdf.bfill().fillna(0) 
print (mdf1) 
    Id_Student English History Mathmatic 
0   1  66.0  66.0  94.0 
1   2  55.0  66.0  94.0 
2   3  55.0  94.0  94.0 
3   4  55.0  94.0  94.0 
4   5  0.0  10.0  20.0 
5   6  0.0  0.0  20.0 

Remplacer par une autre méthode - si la première ffill, puis bfill:

mdf1 = mdf.ffill().bfill() 
print (mdf1) 
    Id_Student English History Mathmatic 
0   1  66.0  66.0  94.0 
1   2  66.0  66.0  94.0 
2   3  66.0  66.0  94.0 
3   4  55.0  94.0  94.0 
4   5  55.0  10.0  94.0 
5   6  55.0  10.0  20.0 


mdf1 = mdf.bfill().ffill() 
print (mdf1) 
    Id_Student English History Mathmatic 
0   1  66.0  66.0  94.0 
1   2  55.0  66.0  94.0 
2   3  55.0  94.0  94.0 
3   4  55.0  94.0  94.0 
4   5  55.0  10.0  20.0 
5   6  55.0  10.0  20.0 
+0

OwO Jezrael, C'est une solution incroyable avec une bonne explication. Cheers mate –