5 votes

Supprimer les lignes qui précèdent et suivent une ligne contenant NaN en Python ?

J'essaie de nettoyer des données expérimentales en utilisant python avec numpy et pandas. Certaines de mes mesures ne sont pas plausibles. Je veux supprimer ces mesures et les 2 mesures précédentes et 2 mesures suivantes du même échantillon. J'essaie de trouver un moyen élégant d'y parvenir sans utiliser une boucle for car mes cadres de données sont assez grands.

Mes données :

>>>df

    Date    Time    Sample  Measurement
index
7737    2019-04-15  06:40:00    A   6.560
7739    2019-04-15  06:50:00    A   1.063
7740    2019-04-15  06:55:00    A   1.136
7741    2019-04-15  07:00:00    A   1.301
7742    2019-04-15  07:05:00    A   1.435
7743    2019-04-15  07:10:00    A   1.704
7744    2019-04-15  07:15:00    A   1.961
7745    2019-04-15  07:20:00    A   2.023
7746    2019-04-15  07:25:00    A   6.284
7747    2019-04-15  07:30:00    A   2.253
7748    2019-04-15  07:35:00    A   6.549
7749    2019-04-15  07:40:00    A   2.591
7750    2019-04-15  07:45:00    A   6.321
7752    2019-04-15  07:55:00    A   0.937
7753    2019-04-15  08:00:00    B   0.372
7754    2019-04-15  08:05:00    B   0.382
7755    2019-04-15  08:10:00    B   0.390
7756    2019-04-15  08:15:00    B   0.455
7757    2019-04-15  08:20:00    B   6.499

import numpy as np
import pandas as pd 

df['Measurement'] = np.where(df['Measurement']>6.0, np.nan, df['Measurement'])

donne

>>>df

    Date    Time    Sample  Measurement
index
7737    2019-04-15  06:40:00    A   NaN
7739    2019-04-15  06:50:00    A   1.063
7740    2019-04-15  06:55:00    A   1.136
7741    2019-04-15  07:00:00    A   1.301
7742    2019-04-15  07:05:00    A   1.435
7743    2019-04-15  07:10:00    A   1.704
7744    2019-04-15  07:15:00    A   1.961
7745    2019-04-15  07:20:00    A   2.023
7746    2019-04-15  07:25:00    A   NaN
7747    2019-04-15  07:30:00    A   2.253
7748    2019-04-15  07:35:00    A   NaN
7749    2019-04-15  07:40:00    A   2.591
7750    2019-04-15  07:45:00    A   NaN
7752    2019-04-15  07:55:00    A   0.937
7753    2019-04-15  08:00:00    B   0.372
7754    2019-04-15  08:05:00    B   0.382
7755    2019-04-15  08:10:00    B   0.390
7756    2019-04-15  08:15:00    B   0.455
7757    2019-04-15  08:20:00    B   NaN

J'ai supprimé des lignes en utilisant

df= df[np.isfinite(df['Measurement'])]

Le résultat que j'essaie d'obtenir après avoir supprimé les 2 lignes qui précèdent et suivent une ligne contenant NaN dans un échantillon (notez que 7753 doit rester car cette mesure appartient à l'échantillon B).

    Date    Time    Sample  Measurement
index
7741    2019-04-15  07:00:00    A   1.301
7742    2019-04-15  07:05:00    A   1.435
7743    2019-04-15  07:10:00    A   1.704
7753    2019-04-15  08:00:00    B   0.372
7754    2019-04-15  08:05:00    B   0.382

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X