0
votes

Comment remplacer les valeurs vides par des nombres précédents dans les pandas

ID     SS     RR
ABC          10.4
ABC   12.6   10.4
ABC   12.6   10.4
LMN           5.6
LMN   8.7     5.6

0 commentaires

3 Réponses :


2
votes

Vous devez le inplace ou l'ajouter en inplace

df.SS.fillna(method='ffill',inplace=True)
df.RR.fillna(method='ffill',inplace=True)

#df.SS = df.SS.fillna(method='ffill')
#df.RR = df.RR.fillna(method='ffill')


2 commentaires

lol m'a obtenu par 10 secondes, je vais supprimer.


Merci à vous deux! Ça marche



1
votes

fillna ne fonctionne pas sur place. Vous devrez soit ajouter inplace=True à vos appels pour fillna comme une autre réponse l'a indiqué.

Vous pouvez également réécrire votre code pour écraser votre trame de données avec la sortie corrigée.

clean_df = df.replace("", np.nan).ffill()
  • .replace("", np.nan) remplacera tous les espaces par NaN dans toute votre trame de données
  • .ffill() est un raccourci pour .fillna(method="ffill")

Puisque nous ne inplace=True pas ici l'indicateur inplace=True , nous pouvons enchaîner ces méthodes et écraser notre dataframe (ou produire une nouvelle dataframe avec ces modifications en changeant notre nom de variable:

df = df.replace("", np.nan).ffill()


1 commentaires

Hé, j'ai édité dans un problème légèrement différent si vous pouvez jeter un oeil. Merci.



1
votes

Vous n'avez pas besoin de fillna ici, vous pouvez appeler ffill() directement:

In [1793]: df[['SS', 'RR']] = df[['SS', 'RR']].ffill()

In [1794]: df
Out[1794]: 
     SS    RR
0   NaN  10.4
1  12.6  10.4
2  12.6  10.4
3  12.6   5.6
4   8.7   5.6


2 commentaires

Hé, j'ai édité dans un problème légèrement différent si vous pouvez jeter un oeil. Merci.


Quelque chose comme ça pourrait fonctionner: df.groupby('ID')[['SS', 'RR']].ffill()