Fonction Pandas df.sort_values()
df.sort_values()C'est une fonction de Pandas utilisée pour trier les données d'un DataFrame selon une ou plusieurs colonnes.
Le tri est une opération de base en analyse de données qui vous aide à mieux comprendre les données et à découvrir des tendances.sort_values()Il prend en charge le tri par une seule colonne ou plusieurs colonnes, par ordre croissant ou décroissant, et peut gérer les valeurs manquantes. C'est un outil indispensable dans le traitement des données.
Syntaxe de base et paramètres
sort_values()C'est une fonction membre de DataFrame, appelée via l'opérateur point.pour l'invoquer.
Format de syntaxe
DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last', ignore_index=False, key=None)
Description du paramètre
| Paramètre | Type | Obligatoire ? | Description | Valeur par défaut |
|---|---|---|---|---|
| par | str ou liste de str | Requis | Spécifie le(s) nom(s) de colonne utilisés pour le tri. S'il s'agit d'une liste, le tri est effectué selon l'ordre de la liste. | Aucune |
| axis | int ou str | Optional | Spécifie l'axe de tri.0ou'index'0 signifie trier par colonnes (par défaut) ;1ou'columns'1 signifie trier par lignes. |
0 |
| ascending | bool ou liste de bool | Optional | Spécifie l'ordre de tri.TrueTrue signifie ordre croissant (du plus petit au plus grand) ;FalseFalse signifie ordre décroissant (du plus grand au plus petit). S'il s'agit d'une liste, elle correspond un à un avecbyles colonnes du paramètre 'by'. |
True |
| inplace | bool | Optional | Si TrueTrue, il modifie directement le DataFrame d'origine et ne renvoie aucun nouvel objet ; si FalseFalse, il renvoie un nouveau DataFrame et les données d'origine restent inchangées. |
False |
| kind | str | Optional | Spécifie l'algorithme de tri.'quicksort''quicksort' (tri rapide),'mergesort''mergesort' (tri fusion),'heapsort''heapsort' (tri par tas),'stable''stable' (tri stable). |
'quicksort' |
| na_position | str | Optional | Spécifie la position des valeurs manquantes (NaN).'first''first' signifie placé au début ;'last''last' signifie placé à la fin. |
'last' |
| ignore_index | bool | Optional | Si TrueTrue, il réinitialise l'index trié, en numérotant à partir de 0 ; si FalseFalse, il conserve l'index d'origine. |
False |
| key | callable | Optional | Applique une fonction aux données avant le tri, couramment utilisée pour des règles de tri personnalisées. | Aucune |
Description de la valeur de retour
- Renvoie un nouveau DataFrame (si
inplace=False), ouNone(siinplace=True)。 - le DataFrame renvoyé a été trié selon les règles spécifiées.
Exemples
Maîtrisons parfaitementsort_values()l’utilisation de df.sort_values().
Exemple 1 : Trier selon une seule colonne par ordre croissant
L’utilisation la plus simple consiste à trier par ordre croissant selon les valeurs d’une colonne.
Exemple
# Créer un DataFrame de notes d’étudiants
data = {
'Name': ['Zhang San', 'Li Si', 'Wang Wu', 'Zhao Liu', 'Qian Qi'],
Mathématiques: [85, 92, 78, 90, 88],
Anglais: [90, 85, 92, 88, 78]
}
df = pd.DataFrame(data)
print(“Données brutes :”)
print(df)
print("=" * 50)
# Trier par ordre croissant selon la note de mathématiques
df_sorted = df.sort_values(by=Mathematics)
print(Après tri selon les notes de mathématiques par ordre croissant :)
print(df_sorted)
Sortie attendue :
原始数据: 姓名 数学 英语 0 张三 85 90 1 李四 92 85 2 王五 78 92 3 赵六 90 88 4 钱七 88 78 ================================================== 按数学成绩升序排序后: 姓名 数学 英语 2 王五 78 92 0 张三 85 90 4 钱七 88 78 3 赵六 90 88 1 李四 92 85
Explication du code :
- L’ordre de tri par défaut est croissant (du plus petit au plus grand).
- La note de mathématiques 78 est placée en première position, et 92 en dernière position.
- Après le tri, l’index reste inchangé (2, 0, 4, 3, 1).
Exemple 2 : Trier selon une seule colonne par ordre décroissant
Utiliserascending=Falsepour obtenir un tri décroissant.
Exemple
# Créer un DataFrame de notes d’étudiants
data = {
'Name': ['Zhang San', 'Li Si', 'Wang Wu', 'Zhao Liu', 'Qian Qi'],
Mathématiques: [85, 92, 78, 90, 88],
Anglais: [90, 85, 92, 88, 78]
}
df = pd.DataFrame(data)
print(“Données brutes :”)
print(df)
print("=" * 50)
# Trier par ordre décroissant selon le score de mathématiques
df_sorted = df.sort_values(by=Mathematics, ascending=False)
print(Après avoir trié par scores de mathématiques en ordre décroissant :)
print(df_sorted)
Sortie attendue :
原始数据: 姓名 数学 英语 0 张三 85 90 1 李四 92 85 2 王五 78 92 3 赵六 90 88 4 钱七 88 78 ================================================== 按数学成绩降序排序后: 姓名 数学 英语 1 李四 92 85 3 赵六 90 88 4 钱七 88 78 0 张三 85 90 2 王五 78 92
Explication du code :
- Utiliser
ascending=Falsepermet d'obtenir un tri décroissant du plus grand au plus petit. - Le score de mathématiques de Li Si, 92, est placé en premier.
Exemple 3 : Trier par plusieurs colonnes
Vous pouvez trier par plusieurs colonnes : triez d'abord par la première colonne, puis, lorsque la première colonne est identique, triez par la deuxième colonne.
Exemple
# Créer un DataFrame de notes d’étudiants
data = {
'Name': ['Zhang San', 'Li Si', 'Wang Wu', 'Zhao Liu', 'Qian Qi'],
Classe: [Classe 1, Classe 2, Classe 1, Classe 2, Classe 1],
Mathématiques: [85, 92, 78, 90, 88]
}
df = pd.DataFrame(data)
print(“Données brutes :”)
print(df)
print("=" * 50)
# Trier d'abord par classe, puis par score de mathématiques (les deux en ordre croissant)
df_sorted = df.sort_values(by=[Class, Mathematics])
print("Après tri par classe d'abord, puis par score de mathématiques :")
print(df_sorted)
print("=" * 50)
# Trier par classe par ordre croissant, score de mathématiques par ordre décroissant
df_sorted2 = df.sort_values(by=[Class, Mathematics], ascending=[True, False])
print(Trier par classe par ordre croissant, score de mathématiques par ordre décroissant :)
print(df_sorted2)
Sortie attendue :
原始数据: 姓名 班级 数学 0 张三 一班 85 1 李四 二班 92 2 王五 一班 78 3 赵六 二班 90 4 钱七 一班 88 ================================================== 先按班级,再按数学成绩排序后: 姓名 班级 数学 2 王五 一班 78 0 张三 一班 85 4 钱七 一班 88 3 赵六 二班 90 1 李四 二班 92 ================================================== 按班级升序,数学成绩降序: 姓名 班级 数学 4 钱七 一班 88 0 张三 一班 85 2 王五 一班 78 1 李四 二班 92 3 赵六 二班 90
Explication du code :
- Utiliser une liste
by=['班级', '数学']pour trier par plusieurs colonnes. - Trier d'abord par "class", avec Class 1 devant et Class 2 derrière.
- Au sein d'une même classe, trier ensuite par le score de "math".
- Utiliser
ascending=[True, False]pour spécifier des directions de tri différentes pour différentes colonnes.
Exemple 4 : Tri avec des valeurs manquantes
Utiliserna_positionparamètre pour contrôler la position des valeurs manquantes.
Exemple
import numpy as np
# Créer un DataFrame avec des valeurs manquantes
data = {
'Name': ['Zhang San', 'Li Si', 'Wang Wu', 'Zhao Liu'],
'Score': [85, np.nan, 92, 78]
}
df = pd.DataFrame(data)
print(“Données brutes :”)
print(df)
print("=" * 50)
# Par défaut : valeurs manquantes placées en dernier
df_sorted_last = df.sort_values(by='Score')
print("Valeurs manquantes placées à la fin :")
print(df_sorted_last)
print("=" * 50)
# Placer les valeurs manquantes en premier
df_sorted_first = df.sort_values(by='Score', na_position='first')
print("Valeurs manquantes placées au début :")
print(df_sorted_first)
Sortie attendue :
原始数据: 姓名 成绩 0 张三 85.0 1 李四 NaN 2 王五 92.0 3 赵六 78.0 ================================================== 缺失值放在最后: 姓名 成绩 3 赵六 78.0 0 张三 85.0 2 王五 92.0 1 李四 NaN ================================================== 缺失值放在最前: 姓名 成绩 1 李四 NaN 3 赵六 78.0 0 张三 85.0 2 王五 92.0
Explication du code :
- Par défaut (
na_position='last'), les valeurs manquantes sont placées en dernier. - Set
na_position='first', et les valeurs manquantes sont placées en premier.
Exemple 5 : Réinitialisation de l'index après le tri
Après le tri, l'index peut devenir discontinu ; vous pouvez utiliserignore_index=Truepour réinitialiser l'index.
Exemple
# Créer un DataFrame
data = {
'Name': ['Zhang San', 'Li Si', 'Wang Wu'],
'Score': [85, 92, 78]
}
df = pd.DataFrame(data)
print(“Données brutes :”)
print(df)
print("=" * 50)
# Trier sans réinitialiser l'index
df_sorted = df.sort_values(by='Score')
print(Après tri (avec les indices d'origine conservés) :)
print(df_sorted)
print("=" * 50)
# Trier et réinitialiser l'index
df_sorted_reset = df.sort_values(by='Score', ignore_index=True)
print(Après tri (index réinitialisé) :)
print(df_sorted_reset)
Sortie attendue :
原始数据: 姓名 成绩 0 张三 85 1 李四 92 2 王五 78 ================================================== 排序后(保留原始索引): 姓名 成绩 2 王五 78 0 张三 85 1 李四 92 ================================================== 排序后(重置索引): 姓名 成绩 0 王五 78 1 张三 85 2 李四 92
Explication du code :
- Utilisation
ignore_index=TrueEnsuite, l'index est renuméroté à partir de 0. - C'est plus pratique lorsque vous devez accéder aux données par index plus tard.
Exemple 6 : Tri personnalisé à l'aide du paramètre key
keyLe paramètre vous permet d'appliquer une fonction personnalisée aux données avant le tri.
Exemple
# Créer un DataFrame contenant un mélange de chaînes en majuscules et en minuscules
data = {
'Word': ['apple', 'Banana', 'cherry', 'APPLE', 'banana']
}
df = pd.DataFrame(data)
print(Données originales :)
print(df)
print("=" * 50)
# Trier par ordre alphabétique croissant (sensible à la casse)
df_sorted_case = df.sort_values(by='Word')
print(Tri alphabétique croissant (sensible à la casse) :)
print(df_sorted_case)
print("=" * 50)
# Utiliser le paramètre key pour obtenir un tri insensible à la casse
df_sorted_nocase = df.sort_values(by='Word', key=lambda x: x.str.lower())
print(Tri alphabétique croissant (insensible à la casse) :)
print(df_sorted_nocase)
Sortie attendue :
原始数据:
单词
0 apple
1 Banana
2 cherry
3 APPLE
4 banana
==================================================
按字母升序(区分大小写):
单词
3 APPLE
0 apple
1 Banana
4 banana
2 cherry
==================================================
按字母升序(不区分大小写):
单词
0 apple
3 APPLE
1 Banana
4 banana
2 cherry
Explication du code :
- Par défaut, le tri est sensible à la casse, les lettres majuscules étant placées avant les lettres minuscules.
- Utilisation
key=lambda x: x.str.lower()toutes les chaînes sont converties en minuscules avant le tri, ce qui permet un tri insensible à la casse.
Exemple 7 : Modification sur place à l'aide du paramètre inplace
Utilisationinplace=Truevous pouvez modifier directement le DataFrame d'origine.
Exemple
# Créer un DataFrame
data = {
'Name': ['Zhang San', 'Li Si', 'Wang Wu'],
'Score': [85, 92, 78]
}
df = pd.DataFrame(data)
print(Données originales :)
print(df)
print(fID des données d'origine : {id(df)})
print("=" * 50)
# Trier sur place en utilisant inplace=True
df.sort_values(by='Score', inplace=True)
print(Après le tri avec inplace=True :)
print(df)
print(fID des données triées : {id(df)})
Sortie attendue :
原始数据: 姓名 成绩 0 张三 85 1 李四 92 2 王五 78 原始数据 id: 140234567890 ================================================== 使用 inplace=True 排序后: 姓名 成绩 2 王五 78 0 张三 85 1 李四 92 排序后数据 id: 140234567890 # 同一个对象
Explication du code :
- Utilisation
inplace=Trueensuite, le DataFrame lui-même est modifié, et aucun nouvel objet n'est renvoyé. - L'ID avant et après le tri
idsont identiques, ce qui indique qu'il s'agit du même objet. - Cette méthode peut économiser de la mémoire, mais elle modifiera les données d'origine.
Notes
sort_values()Par défaut, un nouveau DataFrame est renvoyé et les données d'origine ne sont pas modifiées. Pour modifier sur place, utilisezinplace=Truele paramètre.- L'opération de tri n'est pas effectuée sur place (sauf si spécifié
inplace=True), le DataFrame d'origine reste inchangé. - Utilisation
ignore_index=Truepeut réinitialiser l'index, ce qui est plus pratique dans le traitement ultérieur des données. keyLe paramètre est très puissant et peut mettre en œuvre divers tris personnalisés, tels que l'insensibilité à la casse, le tri par valeur absolue, etc.- Lors du tri sur plusieurs colonnes,
ascendingle paramètre peut être une liste, correspondant un à un avecbyles colonnes dans ...
Autres extensions
Fonctions courantes de Pandas