Obtenir l'index des lignes dont la colonne correspond à une valeur spécifique dans Pandas

  1. Obtenir des indices de lignes contenant des nombres entiers/floats dans Pandas
  2. Obtenir les indices des lignes contenant des chaînes de caractères dans Pandas

Cet article montre comment obtenir l’index des lignes dont la colonne correspond à certains critères dans Pandas.

La nécessité de trouver les indices des lignes est importante dans l’ingénierie des caractéristiques. Ces compétences peuvent être utiles pour supprimer les valeurs aberrantes ou anormales dans une Dataframe. Les indices, également connus sous le nom d’étiquettes de lignes, peuvent être trouvés dans les Pandas à l’aide de plusieurs fonctions. Dans les exemples suivants, nous allons travailler sur la Dataframe créée à l’aide de l’extrait suivant.

import pandas as pd
import numpy as np

np.random.seed(0)

df = pd.DataFrame(np.random.randint(1,20,size=(20, 4)), columns=list('ABCD'))

print (df)

Production :

     A   B   C   D
0   13  16   1   4
1    4   8  10  19
2    5   7  13   2
3    7   8  15  18
4    6  14   9  10
5   17   6  16  16
6    1  19   4  18
7   15   8   1   2
8   10   1  11   4
9   12  19   3   1
10   1   5   6   7
11   9  18  16   5
12  10  11   2   2
13   8  10   4   7
14  12  15  19   1
15  15   4  13  11
16  12   5   7   5
17  16   4  13   5
18   9  15  16   4
19  16  14  17  18

Obtenir des indices de lignes contenant des nombres entiers/floats dans Pandas

La fonction pandas.DataFrame.loc peut accéder aux lignes et aux colonnes par ses étiquettes/noms. Elle retourne directement les lignes correspondant à la condition booléenne donnée passée comme étiquette. Remarquez les crochets à côté de df.loc dans l’extrait.

import pandas as pd
import numpy as np

np.random.seed(0)

df = pd.DataFrame(np.random.randint(1,20,size=(20, 4)), columns=list('ABCD'))

print (df.loc[df['B'] == 19])

Les lignes correspondant à la condition booléenne sont renvoyées sous forme de sortie au format d’une Dataframe.

Production :

    A   B  C   D
6   1  19  4  18
9  12  19  3   1

Plusieurs conditions peuvent être enchaînées et appliquées ensemble à la fonction, comme indiqué ci-dessous. Cela permet d’isoler les lignes en fonction de conditions spécifiques.

import pandas as pd
import numpy as np

np.random.seed(0)

df = pd.DataFrame(np.random.randint(1,20,size=(20, 4)), columns=list('ABCD'))

print (df.loc[(df['B'] == 19) | (df['C'] == 19)])

Production :

     A   B   C   D
6    1  19   4  18
9   12  19   3   1
14  12  15  19   1

Obtenir l’index des lignes avec pandas.DataFrame.index()

Si vous souhaitez trouver uniquement les indices correspondant à la trame de données qui satisfait à la condition booléenne passée en argument, pandas.DataFrame.index() est le moyen le plus simple d’y parvenir.

import pandas as pd
import numpy as np

np.random.seed(0)

df = pd.DataFrame(np.random.randint(1,20,size=(20, 4)), columns=list('ABCD'))

print (df.index[df['B'] == 19].tolist())

Dans l’extrait ci-dessus, les lignes de la colonne A correspondant à la condition booléenne == 1 sont renvoyées en sortie comme indiqué ci-dessous.

Production :

[6, 9]

La raison pour laquelle nous avons mis tolist() derrière la méthode index() est de convertir l’ Index en liste ; sinon, le résultat est de type de données Int64Index.

Int64Index([6, 9], dtype='int64'

La récupération des indices seulement peut être faite en fonction de plusieurs conditions. L’extrait peut être écrit comme suit :

import pandas as pd
import numpy as np

np.random.seed(0)

df = pd.DataFrame(np.random.randint(1,20,size=(20, 4)), columns=list('ABCD'))

print (df.index[(df['B'] == 19) | (df['C'] == 19)].tolist())

Production :

[6, 9, 14]

Obtenir les indices des lignes contenant des chaînes de caractères dans Pandas

Les valeurs des chaînes de caractères peuvent être comparées selon deux méthodes. Les deux méthodes présentées dans la section précédente fonctionneront, sauf pour le changement de condition.

Dans les exemples suivants, nous utiliserons l’extrait suivant.

import pandas as pd

df = pd.DataFrame({"Name": ["blue", 
                            "delta", 
                            "echo", 
                            "charlie", 
                            "alpha"], 
                    "Type": ["Raptors",
                            "Raptors",
                            "Raptors",
                            "Raptors",
                            "Tyrannosaurus rex"]
                    })

print (df)

Production :

      Name               Type
0     blue            Raptors
1    delta            Raptors
2     echo            Raptors
3  charlie            Raptors
4    alpha  Tyrannosaurus rex

Obtenir l’index des lignes avec la correspondance exacte des chaînes de caractères

La condition d’égalité utilisée dans la section précédente peut être utilisée pour trouver la correspondance exacte de la chaîne dans la Dataframe. Nous rechercherons les deux chaînes de caractères.

import pandas as pd

df = pd.DataFrame({"Name": ["blue", 
                            "delta", 
                            "echo", 
                            "charlie", 
                            "alpha"], 
                    "Type": ["Raptors",
                            "Raptors",
                            "Raptors",
                            "Raptors",
                            "Tyrannosaurus rex"]
                    })

print (df.index[(df['Name'] == 'blue')].tolist())
print ('\n')
print (df.loc[df['Name'] == 'blue'])
print ('\n')
print (df.loc[(df['Name'] == 'charlie') & (df['Type'] =='Raptors')])

Production :

[0]

   Name     Type
0  blue  Raptors

      Name     Type
3  charlie  Raptors

Comme on l’a vu plus haut, on peut recevoir à la fois l’index et les lignes correspondant à la condition.

Obtenir l’index des lignes avec la correspondance partielle des chaînes de caractères

Les valeurs des chaînes de caractères peuvent être partiellement adaptées en chaînant le dataframe à la fonction str.contains. Dans l’exemple suivant, nous chercherons la chaîne ha dans charlie et alpha.

import pandas as pd

df = pd.DataFrame({"Name": ["blue", 
                            "delta", 
                            "echo", 
                            "charlie", 
                            "alpha"], 
                    "Type": ["Raptors",
                            "Raptors",
                            "Raptors",
                            "Raptors",
                            "Tyrannosaurus rex"]
                    })

print (df.index[df['Name'].str.contains('ha')].tolist())
print ('\n')
print (df.loc[df['Name'].str.contains('ha')])
print ('\n')
print (df.loc[(df['Name'].str.contains('ha')) & (df['Type'].str.contains('Rex'))])

Production :

[3, 4]

      Name               Type
3  charlie            Raptors
4    alpha  Tyrannosaurus rex


    Name               Type
4  alpha  Tyrannosaurus rex

Cette fonction peut être très utile pour effectuer une correspondance partielle de chaîne sur plusieurs colonnes du DataFrame.

Article connexe - Pandas DataFrame

  • Comment parcourir les lignes d'un DataFrame dans Pandas
  • Comment compter la fréquence à laquelle une valeur se produit dans Pandas Dataframe
  • Article connexe - Pandas DataFrame Row

  • Comment créer une colonne vide dans Pandas DataFrame
  • Comment ajouter une nouvelle colonne à DataFrame existant avec une valeur par défaut dans Pandas