Supposons que j'ai un DataFrame avec des NaN
s:
>>> import pandas as pd
>>> df = pd.DataFrame([[1, 2, 3], [4, None, None], [None, None, 9]])
>>> df
0 1 2
0 1 2 3
1 4 NaN NaN
2 NaN NaN 9
Ce que je dois faire est de remplacer chaque NaN
par la première non- NaN
valeur dans la même colonne au-dessus. On suppose que la première ligne ne contiendra jamais de fichier NaN
. Donc, pour l'exemple précédent, le résultat serait
0 1 2
0 1 2 3
1 4 2 3
2 4 2 9
Je peux simplement parcourir l'ensemble de DataFrame colonne par colonne, élément par élément et définir les valeurs directement, mais existe-t-il un moyen simple (de manière optimale sans boucle) d'y parvenir?
La réponse acceptée est parfaite. J'ai eu une situation connexe mais légèrement différente où je devais remplir en avant mais seulement au sein des groupes. Si quelqu'un a le même besoin, sachez que fillna fonctionne sur un objet DataFrameGroupBy.
la source
Vous pouvez utiliser
pandas.DataFrame.fillna
avec l'method='ffill'
option.'ffill'
signifie «remplissage en avant» et propage la dernière observation valide vers l'avant. L'alternative est celle'bfill'
qui fonctionne de la même manière, mais à l'envers.Il existe également une fonction de synonyme direct pour cela
pandas.DataFrame.ffill
, pour simplifier les choses.la source
Une chose que j'ai remarquée en essayant cette solution est que si vous avez N / A au début ou à la fin du tableau, ffill et bfill ne fonctionnent pas tout à fait. Vous avez besoin des deux.
la source
ffill
a maintenant sa propre méthodepd.DataFrame.ffill
la source
Une seule version de colonne
la source
Juste d'accord avec la
ffill
méthode, mais une information supplémentaire est que vous pouvez limiter le remplissage avant avec l'argument mot-clélimit
.Maintenant avec l'
limit
argument mot-cléla source
Dans mon cas, nous avons des séries chronologiques de différents appareils, mais certains appareils ne pouvaient pas envoyer de valeur pendant une certaine période. Nous devons donc créer des valeurs NA pour chaque appareil et période de temps et ensuite faire fillna.
Résultat:
la source
Vous pouvez utiliser
fillna
pour supprimer ou remplacer les valeurs NaN.NaN Supprimer
Remplacer NaN
Référence pandas.DataFrame.fillna
la source