English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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-
Index | Description |
.loc() | Basé sur les étiquettes |
.iloc() | Basé sur les entiers |
.ix() | Basé sur les étiquettes et les entiers |
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.
# 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
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
# 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
# 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
# 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
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
# 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
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
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
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().
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
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
Les valeurs sont obtenues à partir d'un objet Pandas en utilisant l'index multiple avec les symboles suivants :
Objet | Indexeur | Type de retour |
Series | s.loc[indexer] | Valeur scalaire |
DataFrame | df.loc[row_index,col_index] | Objet Series |
Panel | p.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 '[]'-
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
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
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: []
Il est possible d'utiliser les opérateurs d'attribut «.» pour sélectionner des colonnes.
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