English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Index et requêtes de données Pandas

Exemples d'opérations d'indexation et de recherche de données Pandas

Dans ce chapitre, nous discuterons de la manière de trancher et de découper les dates et d'obtenir des sous-ensembles d'objets Pandas.
Les opérateurs d'indexage de Python et de NumPy «[]» et les opérateurs d'attribut «.» peuvent accéder rapidement et facilement aux structures de données Pandas dans divers cas. Cependant, en raison de l'incertitude quant au type de données à accéder à l'avance, l'utilisation directe des opérateurs standard comporte certains inconvénients d'optimisation. Pour le code de production, nous vous recommandons d'utiliser les méthodes d'accès optimisées aux données Pandas présentées dans ce chapitre.
Pandas prend en charge trois types d'index multi-axes : les trois types mentionnés dans le tableau suivant-

IndexDescription
.loc()Basé sur les étiquettes
.iloc()Basé sur les entiers
.ix()Basé sur les étiquettes et les entiers

.loc()

Pandas propose plusieurs méthodes pour une indexation purement basée sur les étiquettes. Lors du tranchage, la limite de début est également incluse. Les entiers sont des étiquettes valides, mais ils référencent les étiquettes plutôt que les positions.

.loc() Il dispose de multiples méthodes d'accès, par exemple :

Une étiquette scalaire Liste d'étiquettes Objet de tranchage Tableau booléen

loc Deux parenthèses simples sont nécessaires/Liste/L'opérateur de portée, séparé par des virgules. La première indique la ligne, la deuxième la colonne.

Cas 1

# Importation de la bibliothèque pandas et alias pd
 import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4,
 index = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'], columns = ['A', 'B', 'C', 'D'])
 # Sélection de toutes les lignes pour une colonne spécifique
 print(df.loc[:, 'A'])

Résultat de l'exécution :

  a         0.391548
b  -0.070649
c  -0.317212
d  -2.162406
e   2.202797
f         0.613709
g   1.050559
h   1.122680
Nom: A, dtype: float64

Instance 2

   
 import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4,
 index = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'], columns = ['A', 'B', 'C', 'D'])
 # Sélection de toutes les lignes pour plusieurs colonnes, par exemple list[]
 print(df.loc[:, ['A', 'C']])

Résultat de l'exécution :

          A          C
a         0.391548    0.745623
b   -0.070649    1.620406
c   -0.317212    1.448365
d   -2.162406   -0.873557
e    2.202797    0.528067
f         0.613709    0.286414
g    1.050559    0.216526
h    1.122680   -1.621420

Instance 3

# Importation de la bibliothèque pandas et alias pd
 import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4,
 index = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'], columns = ['A', 'B', 'C', 'D'])
 # Sélection de plusieurs lignes pour plusieurs colonnes, par exemple list[]
 print(df.loc[['a', 'b', 'f', 'h'], ['A', 'C']])

Résultat de l'exécution :

         A          C
a         0.391548   0.745623
b  -0.070649   1.620406
f         0.613709   0.286414
h   1.122680  -1.621420

Instance 4

# Importation de la bibliothèque pandas et alias pd
 import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4,
 index = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'], columns = ['A', 'B', 'C', 'D'])
 # Sélection de la portée des lignes pour toutes les colonnes
 print(df.loc['a':'h'])

Résultat de l'exécution :

          A          B          C          D
a         0.391548   -0.224297   0.745623   0.054301
b   -0.070649   -0.880130   1.620406   1.419743
c   -0.317212   -1.929698   1.448365   0.616899
d   -2.162406    0.614256  -0.873557   1.093958
e    2.202797   -2.315915   0.528067   0.612482
f         0.613709   -0.157674   0.286414  -0.500517
g    1.050559   -2.272099   0.216526   0.928449
h    1.122680         0.324368  -1.621420  -0.741470

Instance 5

# Importation de la bibliothèque pandas et alias pd
 import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4,
 index = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'], columns = ['A', 'B', 'C', 'D'])
 # Utilisé pour obtenir des valeurs à partir d'un tableau booléen
 print(df.loc['a'] > 0)

Résultat de l'exécution :

   A      False
 B      True
 C      False
 D      False
 Nom: a, Type: bool

.iloc()

Pandas offre plusieurs méthodes pour obtenir des indices basés strictement sur des entiers. Comme Python et NumPy, ils sont basés sur un index de 0.
Les différentes méthodes d'accès sont les suivantes :

Entier Liste d'entiers Portée des valeurs

Instance1

# Importation de la bibliothèque pandas et alias pd
 import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4), colonnes = ['A', 'B', 'C', 'D'])
 # Sélection de toutes les lignes pour une colonne spécifique
 print(df.iloc[:4)

Résultat de l'exécution :

         A          B          C          D
0        0.699435   0.256239   -1.270702   -0.645195
1  -0.685354   0.890791   -0.813012    0.631615
2  -0.783192  -0.531378    0.025070         0.230806
3   0.539042  -1.284314    0.826977   -0.026251

Instance 2

import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4), colonnes = ['A', 'B', 'C', 'D'])
 # Coupe d'entiers
 print(df.iloc[:4]
 print(df.iloc[1:5, 2:4)

Résultat de l'exécution :

         A          B          C          D
0        0.699435   0.256239   -1.270702   -0.645195
1  -0.685354   0.890791   -0.813012    0.631615
2  -0.783192  -0.531378    0.025070         0.230806
3   0.539042  -1.284314    0.826977   -0.026251
           C          D
1  -0.813012   0.631615
2   0.025070        0.230806
3   0.826977  -0.026251
4   1.423332   1.130568

Instance 3

import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4), colonnes = ['A', 'B', 'C', 'D'])
 # Coupe de liste de valeurs
 print(df.iloc[[1, 3, 5], [1, 3], ]
 print(df.iloc[1:3, :])
 print(df.iloc[:,1:3)

Résultat de l'exécution :

         B          D
1   0.890791    0.631615
3  -1.284314   -0.026251
5  -0.512888   -0.518930
           A          B          C          D
1  -0.685354    0.890791   -0.813012    0.631615
2  -0.783192   -0.531378    0.025070         0.230806
           B          C
0        0.256239   -1.270702
1   0.890791   -0.813012
2  -0.531378    0.025070
3  -1.284314    0.826977
4  -0.460729    1.423332
5  -0.512888    0.581409
6  -1.204853    0.098060
7  -0.947857    0.641358

.ix()

En plus des méthodes basées sur des étiquettes pures et basées sur des entiers, Pandas propose une méthode hybride pour sélectionner et extraire des sous-ensembles d'objets en utilisant l'opérateur .ix().

Instance 1

import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4), colonnes = ['A', 'B', 'C', 'D'])
 # Coupe d'entiers
 print(df.ix[:4)

Résultat de l'exécution :

         A          B          C          D
0        0.699435   0.256239   -1.270702   -0.645195
1  -0.685354   0.890791   -0.813012    0.631615
2  -0.783192  -0.531378    0.025070         0.230806
3   0.539042  -1.284314    0.826977   -0.026251

Instance 2

import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4), colonnes = ['A', 'B', 'C', 'D'])
 # Coupe d'index
 print(df.ix[:, 'A'])

Résultat de l'exécution :

  0        0.699435
1  -0.685354
2  -0.783192
3   0.539042
4  -1.044209
5  -1.415411
6   1.062095
7   0.994204
Nom: A, dtype: float64

Utilisation des symboles

Les valeurs sont obtenues à partir d'un objet Pandas en utilisant l'index multiple avec les symboles suivants :

ObjetIndexeurType de retour
Seriess.loc[indexer]Valeur scalaire
DataFramedf.loc[row_index,col_index]Objet Series
Panelp.loc[item_index,major_index, minor_index]p.loc[item_index,major_index, minor_index]

.iloc() et .ix() appliquent les mêmes options d'indexation et retournent les mêmes valeurs.

Voyons comment effectuer chaque opération sur l'objet DataFrame. Nous utiliserons les opérateurs d'indexation de base '[]'-

Instance 1

import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4), colonnes = ['A', 'B', 'C', 'D'])
 print(df['A'])

Résultat de l'exécution :

  0  -0.478893
1   0.391931
2   0.336825
3  -1.055102
4  -0.165218
5  -0.328641
6   0.567721
7  -0.759399
Nom: A, dtype: float64

Nous pouvons passer une liste de valeurs à [] pour sélectionner ces colonnes

Instance 2

import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4), colonnes = ['A', 'B', 'C', 'D'])
 print(df[['A','B']])

Résultat de l'exécution :

         A           B
0  -0.478893   -0.606311
1   0.391931   -0.949025
2   0.336825    0.093717
3  -1.055102   -0.012944
4  -0.165218    1.550310
5  -0.328641   -0.226363
6   0.567721   -0.312585
7  -0.759399   -0.372696

Instance 3

import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4), colonnes = ['A', 'B', 'C', 'D'])
 print(df[2:2)

Résultat de l'exécution :

   Colonnes: [A, B, 'C', 'D]
 Index: []

Accès aux attributs

Il est possible d'utiliser les opérateurs d'attribut «.» pour sélectionner des colonnes.

Instance

import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(8, 4), colonnes = ['A', 'B', 'C', 'D'])
 print(df.A)

Résultat de l'exécution :

  0   -0.478893
1    0.391931
2    0.336825
3   -1.055102
4   -0.165218
5   -0.328641
6    0.567721
7   -0.759399
Nom: A, dtype: float64