Mon code détecte les valeurs aberrantes dans une série chronologique. Ce que je veux faire est de remplacer les valeurs aberrantes dans la première colonne de données avec la valeur précédente qui n'est pas une valeur aberrante.Remplacer une valeur dans une colonne de données Panda par la précédente
Ce code détecte seulement les valeurs aberrantes, ce qui crée une matrice booléenne où:
True
signifie qu'une valeur dans la trame de données est une valeur aberranteFalse
signifie qu'une valeur dans la trame de données ne sont pas une valeur aberrante
series = read_csv('horario_completo.csv', header=None, squeeze=True) df=pd.DataFrame(series) from pandas import rolling_median consumos=df.iloc[:,0] df['rolling_median'] = rolling_median(consumos, window=48, center=True).fillna(method='bfill').fillna(method='ffill') threshold =50 difference = np.abs(consumos - df['rolling_median']) outlier = difference > threshold
Jusqu'à présent, tout fonctionne.
La prochaine étape que j'ai pensé est de créer un masque pour remplacer les valeurs True
avec la valeur précédente de la même colonne (si cela était possible, ce serait beaucoup plus rapide que de faire une boucle).
Je vais essayer de l'expliquer avec un petit exemple:
C'est ce que j'ai:
index consumo
0 54
1 67
2 98
index outlier
0 False
1 False
2 True
Et c'est ce que je veux faire:
index consumo
0 54
1 67
2 67
I pense que je devrais créer un masque comme celui-ci:
df.mask(outlier, df.columns=[[0]][i-1],axis=1)
obviosly ce n'est pas le moyen de l'écrire. C'est juste une explication sur comment je pense que cela pourrait être fait (je parle de [i-1]).
Je ne savais pas sur l'existence de décalage(). C'est vraiment très utile. Et votre réponse est claire et fonctionne très bien. Merci beaucoup. – Jvr
Glad peut aider, belle journée! – jezrael