Considérons un tableau numpy 2D avec 6 lignes et 4 colonnes. Notre objectif est d'éliminer les lignes qui contiennent la valeur -999 :
Créez un tableau numpy en 2D.
import pandas as pd
import numpy as np
data = np.array([[44., 99., 2., 93.],
[51., 72., 75., 28.],
[89., -999., 17., 17.],
[73., 11., 81., 3.],
[83., 59., 41., -999.],
[34., 94., 51., 84.]])
Utilisation de any()
Si l'objectif est d'éliminer toutes les lignes contenant la valeur -999, quelle que soit la colonne dans laquelle elle apparaît, une solution consiste à utiliser any():
(data == -999.).any(axis=1)
retourne ici.
array([False, False, True, False, True, False])
Puisque les lignes d'index 2 et 4 contiennent une valeur de -999 (en tenant compte du fait que Python utilise un index à partir de 0).
Pour ne conserver que les lignes sans -999, une solution consiste à prendre l'inverse en utilisant l'opérateur python ~:
~(data == -999.).any(axis=1)
qui donne
array([ True, True, False, True, False, True])
et définir un nouveau tableau:
new_data = data[ ~(data == -999.).any(axis=1) , : ]
print(new_data)
qui renverra:
array([[44., 99., 2., 93.],
[51., 72., 75., 28.],
[73., 11., 81., 3.],
[34., 94., 51., 84.]])
Filtrez les lignes en fonction d'une condition spécifique dans une colonne particulière
Par exemple, supprimez les lignes s'il y a une valeur de -999 dans la colonne d'index 1 (ce qui signifie la deuxième colonne).
data[ data[:,1] != -999. ]
donne
array([[ 44., 99., 2., 93.],
[ 51., 72., 75., 28.],
[ 73., 11., 81., 3.],
[ 83., 59., 41., -999.],
[ 34., 94., 51., 84.]])
Filtrer les lignes en fonction d'une condition spécifique dans plusieurs colonnes.
Utilisation d'une condition avec l'opérateur &.
data[ (data[:, 1] != -999.) & (data[:, 3] != -999.) ]
donne
array([[44., 99., 2., 93.],
[51., 72., 75., 28.],
[73., 11., 81., 3.],
[34., 94., 51., 84.]])
Utilisation de any ()
Remarquez que:
(data[:, [1,3]] == -999.).any(axis=1)
donne
array([False, False, True, False, True, False])
Alors
data[ ~(data[:, [1,3]] == -999.).any(axis=1), : ]
donne
array([[44., 99., 2., 93.],
[51., 72., 75., 28.],
[73., 11., 81., 3.],
[34., 94., 51., 84.]])
Références
Liens | Site |
---|---|
numpy.any | numpy.org |
numpy.invert | numpy.org |