Obtenir l'index des lignes dont la colonne correspond à une valeur spécifique dans Pandas
- Obtenir des indices de lignes contenant des nombres entiers/floats dans Pandas
- 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 DataFrame 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 obtenir les en-têtes de colonne de Pandas DataFrame sous forme de liste
- Comment supprimer une colonne de Pandas DataFrame
- Comment convertir la colonne DataFrame en date-heure dans Pandas
- Comment convertir un float en un entier dans Pandas DataFrame
- Comment trier le DataFrame de Pandas par les valeurs d'une colonne
- Comment obtenir l'agrégat des Pandas par groupe et par somme
Article connexe - Pandas DataFrame Row
- Comment obtenir le nombre de lignes d'un Pandas DataFrame
- Comment mélanger au hasard les lignes DataFrame dans Pandas
- Filtrer les lignes des cadres de données en fonction des valeurs des colonnes dans Pandas
- Comment parcourir les lignes d'un DataFrame dans Pandas
- Comment obtenir l'index de toutes les lignes dont la colonne particulière satisfait la condition donnée dans Pandas
- Les Pandas déposent des lignes en double