
Pour trier pandas.DataFrame et pandas.Series, utilisez sort_values() et sort_index(). Vous pouvez trier par ordre croissant ou décroissant, ou trier sur plusieurs colonnes.
Notez que la méthode sort() de l’ancienne version est obsolète.
Cet article décrit le contenu suivant.
- Trier par élément (données) :
sort_values()- Croissant ou décroissant :
ascending - Trier par plusieurs colonnes
- Manipuler NaN :
na_position - Modifier l’objet d’origine :
inplace - Trier dans le sens des lignes :
axis
- Croissant ou décroissant :
- Trier par index/colonnes (noms de lignes/colonnes) :
sort_index()- Trier par index (nom de ligne)
- Croissant ou décroissant :
ascending - Modifier l’objet d’origine :
inplace - Trier par colonnes (nom de colonne) :
axis
Les données suivantes sont utilisées à titre d’exemple.
import pandas as pd
df = pd.read_csv('data/src/sample_pandas_normal.csv')
print(df)
# name age state point
# 0 Alice 24 NY 64
# 1 Bob 42 CA 92
# 2 Charlie 18 CA 70
# 3 Dave 68 TX 70
# 4 Ellen 24 CA 88
# 5 Frank 30 NY 57
L’exemple utilise pandas.DataFrame, mais pandas.Series fournit également reset_index(). L’utilisation est la même.
Trier par élément (données) :sort_values()
Pour trier par valeur d’élément, utilisez la méthode sort_values().
Spécifiez l’étiquette de la colonne (nom de la colonne) par laquelle vous souhaitez trier le premier argument.
df_s = df.sort_values('state')
print(df_s)
# name age state point
# 1 Bob 42 CA 92
# 2 Charlie 18 CA 70
# 4 Ellen 24 CA 88
# 0 Alice 24 NY 64
# 5 Frank 30 NY 57
# 3 Dave 68 TX 70
Utilisez reset_index() pour réaffecter l’index.
Croissant ou décroissant :ascending
La valeur par défaut est de trier par ordre croissant. Si vous avez besoin d’un ordre décroissant, définissez l’argument croissant sur False.
df_s = df.sort_values('state', ascending=False)
print(df_s)
# name age state point
# 3 Dave 68 TX 70
# 0 Alice 24 NY 64
# 5 Frank 30 NY 57
# 1 Bob 42 CA 92
# 2 Charlie 18 CA 70
# 4 Ellen 24 CA 88
Trier par plusieurs colonnes
Si vous spécifiez le premier argument par sous forme de liste, vous pouvez effectuer un tri sur plusieurs colonnes.
Triez à partir de la fin de la liste dans l’ordre. Enfin, il trie sur la première colonne spécifiée de la liste.
df_s = df.sort_values(['state', 'age'])
print(df_s)
# name age state point
# 2 Charlie 18 CA 70
# 4 Ellen 24 CA 88
# 1 Bob 42 CA 92
# 0 Alice 24 NY 64
# 5 Frank 30 NY 57
# 3 Dave 68 TX 70
df_s = df.sort_values(['age', 'state'])
print(df_s)
# name age state point
# 2 Charlie 18 CA 70
# 4 Ellen 24 CA 88
# 0 Alice 24 NY 64
# 5 Frank 30 NY 57
# 1 Bob 42 CA 92
# 3 Dave 68 TX 70
Si l’argument croissant est spécifié dans une liste, l’ordre croissant/décroissant peut être sélectionné pour chaque colonne.
df_s = df.sort_values(['age', 'state'], ascending=[True, False])
print(df_s)
# name age state point
# 2 Charlie 18 CA 70
# 0 Alice 24 NY 64
# 4 Ellen 24 CA 88
# 5 Frank 30 NY 57
# 1 Bob 42 CA 92
# 3 Dave 68 TX 70
Manipuler NaN :na_position
S’il manque une valeur NaN, par défaut, elle est listée à la fin.
df_nan = df.copy()
df_nan.iloc[:2, 1] = pd.np.nan
print(df_nan)
# name age state point
# 0 Alice NaN NY 64
# 1 Bob NaN CA 92
# 2 Charlie 18.0 CA 70
# 3 Dave 68.0 TX 70
# 4 Ellen 24.0 CA 88
# 5 Frank 30.0 NY 57
df_nan_s = df_nan.sort_values('age')
print(df_nan_s)
# name age state point
# 2 Charlie 18.0 CA 70
# 4 Ellen 24.0 CA 88
# 5 Frank 30.0 NY 57
# 3 Dave 68.0 TX 70
# 0 Alice NaN NY 64
# 1 Bob NaN CA 92
Si l’argument na_position=’first’, il est listé en haut.
df_nan_s = df_nan.sort_values('age', na_position='first')
print(df_nan_s)
# name age state point
# 0 Alice NaN NY 64
# 1 Bob NaN CA 92
# 2 Charlie 18.0 CA 70
# 4 Ellen 24.0 CA 88
# 5 Frank 30.0 NY 57
# 3 Dave 68.0 TX 70
Consultez les articles suivants pour savoir comment supprimer et remplacer les valeurs manquantes.
Modifier l’objet d’origine :inplace
Par défaut, les nouveaux objets triés sont renvoyés, mais si l’argument inplace est défini sur True, l’objet d’origine lui-même est modifié.
df.sort_values('state', inplace=True)
print(df)
# name age state point
# 1 Bob 42 CA 92
# 2 Charlie 18 CA 70
# 4 Ellen 24 CA 88
# 0 Alice 24 NY 64
# 5 Frank 30 NY 57
# 3 Dave 68 TX 70
Trier dans le sens des lignes :axis
Comme dans les exemples précédents, par défaut, le tri est effectué dans le sens des colonnes (sens vertical).
Si vous souhaitez trier dans le sens des lignes, définissez l’axe des arguments sur 1. D’autres arguments peuvent être utilisés de la même manière que dans les exemples précédents.
Puisqu’une erreur se produit lorsqu’un nombre et une chaîne sont mélangés, dans cet exemple, les colonnes de chaîne sont supprimées afin que seules les colonnes numériques soient utilisées. Voir l’article suivant pour la méthode drop().
df_d = df.drop(['name', 'state'], axis=1)
print(df_d)
# age point
# 1 42 92
# 2 18 70
# 4 24 88
# 0 24 64
# 5 30 57
# 3 68 70
df_d .sort_values(by=1, axis=1, ascending=False, inplace=True)
print(df_d)
# point age
# 1 92 42
# 2 70 18
# 4 88 24
# 0 64 24
# 5 57 30
# 3 70 68
Trier par index/colonnes (noms de lignes/colonnes) :sort_index()
Pour trier par index/colonnes (noms de lignes/colonnes), utilisez la méthode sort_index().
Trier par index (nom de ligne)
Par défaut, sort_index() trie dans le sens des colonnes (sens vertical) en fonction du nom de la ligne (étiquette).
print(df)
# name age state point
# 1 Bob 42 CA 92
# 2 Charlie 18 CA 70
# 4 Ellen 24 CA 88
# 0 Alice 24 NY 64
# 5 Frank 30 NY 57
# 3 Dave 68 TX 70
df_s = df.sort_index()
print(df_s)
# name age state point
# 0 Alice 24 NY 64
# 1 Bob 42 CA 92
# 2 Charlie 18 CA 70
# 3 Dave 68 TX 70
# 4 Ellen 24 CA 88
# 5 Frank 30 NY 57
Croissant ou décroissant :ascending
Comme avec sort_values(), la valeur par défaut est de trier par ordre croissant. Si vous avez besoin d’un ordre décroissant, définissez l’argument croissant sur False.
df_s = df.sort_index(ascending=False)
print(df_s)
# name age state point
# 5 Frank 30 NY 57
# 4 Ellen 24 CA 88
# 3 Dave 68 TX 70
# 2 Charlie 18 CA 70
# 1 Bob 42 CA 92
# 0 Alice 24 NY 64
Modifier l’objet d’origine :inplace
Comme avec sort_values(), vous pouvez utiliser l’argument inplace. Le définir sur True modifie l’objet d’origine.
df.sort_index(inplace=True)
print(df)
# name age state point
# 0 Alice 24 NY 64
# 1 Bob 42 CA 92
# 2 Charlie 18 CA 70
# 3 Dave 68 TX 70
# 4 Ellen 24 CA 88
# 5 Frank 30 NY 57
Trier par colonnes (nom de colonne) :axis
En définissant axe = 1, il est trié dans le sens des lignes (sens horizontal) en fonction des colonnes (nom de la colonne). D’autres arguments peuvent être utilisés comme dans les exemples précédents.
df_s = df.sort_index(axis=1)
print(df_s)
# age name point state
# 0 24 Alice 64 NY
# 1 42 Bob 92 CA
# 2 18 Charlie 70 CA
# 3 68 Dave 70 TX
# 4 24 Ellen 88 CA
# 5 30 Frank 57 NY
df.sort_index(axis=1, ascending=False, inplace=True)
print(df)
# state point name age
# 0 NY 64 Alice 24
# 1 CA 92 Bob 42
# 2 CA 70 Charlie 18
# 3 TX 70 Dave 68
# 4 CA 88 Ellen 24
# 5 NY 57 Frank 30
