Exemples de comment supprimer des lignes d'un tableau numpy pour différents cas :
Créez un tableau numpy 2D
Commençons par créer un tableau 2D de base avec numpy.
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.]])
Supprimer les lignes en utilisant delete()
La manière la plus simple de supprimer des lignes d'un tableau numpy est d'utiliser la fonction numpy.delete
. Cette fonction prend deux arguments : un tableau et une liste d'indices (les positions des éléments que vous souhaitez supprimer) :
Supprimer une ligne spécifique basée sur son index
Pour supprimer une ligne spécifique avec un index donné, une solution consiste à utiliser delete():
np.delete(data, (2), axis=0)
donne
array([[ 44., 99., 2., 93.],
[ 51., 72., 75., 28.],
[ 73., 11., 81., 3.],
[ 83., 59., 41., -999.],
[ 34., 94., 51., 84.]])
Supprimer plusieurs lignes
np.delete(data, (2,4), axis=0)
donne
array([[44., 99., 2., 93.],
[51., 72., 75., 28.],
[73., 11., 81., 3.],
[34., 94., 51., 84.]])
Supprimer les lignes en fonction d'une condition de colonne
Supprimer les lignes en utilisant any()
Si l'objectif est d'éliminer toutes les lignes contenant la valeur -999, indépendamment de la colonne dans laquelle elle apparaît, une solution consiste à utiliser any():
(data == -999.).any(axis=1)
donne ici
array([False, False, True, False, True, False])
Puisque les lignes d'index 2 et 4 contiennent une valeur de -999 (en gardant à l'esprit que Python utilise un index basé sur 0).
Maintenant, pour ne conserver que les lignes sans -999, une solution consiste à prendre l'inverse à l'aide de l'opérateur python ~ :
~(data == -999.).any(axis=1)
ce qui donne:
array([ True, True, False, True, False, True])
et définissez un nouvel tableau :
new_data = data[ ~(data == -999.).any(axis=1) , : ]
print(new_data)
ce qui donne
array([[44., 99., 2., 93.],
[51., 72., 75., 28.],
[73., 11., 81., 3.],
[34., 94., 51., 84.]])
Filtrer les lignes en fonction d'une condition spécifique dans une colonne particulière
Par exemple, supprimer les lignes s'il y a une valeur de -999 dans la colonne d'indice 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.]])
Avec any()
Notez 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.delete | numpy.org |
numpy.any | numpy.org |
numpy.invert | numpy.org |