Fonction df.reset_index() de Pandas
df.reset_index()est une fonction dans Pandas utilisée pour réinitialiser l'index de ligne d'un DataFrame.
Lors du traitement des données, l'index peut devenir discontinu ou ne pas répondre à vos besoins.reset_index()Il peut réinitialiser l'index sur l'index entier par défaut (0, 1, 2, ...), ou convertir l'index actuel en colonne. C'est très utile pour le nettoyage des données, le tri et l'organisation des données après filtrage.
Syntaxe de base et paramètres
reset_index()est une fonction membre de DataFrame, invoquée via l'opérateur point.pour appeler.
Format de syntaxe
DataFrame.reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill='')
Description du paramètre
| Paramètre | Type | Requis | Description | Valeur par défaut |
|---|---|---|---|---|
| level | int, str, tuple ou list | Optional | Spécifie le(s) niveau(x) d'index à réinitialiser. Pour un MultiIndex, vous pouvez choisir de réinitialiser certains niveaux. Par défaut, tous les niveaux sont réinitialisés. | Aucune |
| drop | bool | Optional | S'il estTrue, supprime l'index d'origine sans le convertir en colonne ; s'il estFalse, conserve l'index d'origine comme nouvelle colonne. |
False |
| inplace | bool | Optional | S'il estTrue, modifie directement le DataFrame d'origine et ne renvoie pas de nouvel objet ; s'il estFalse, renvoie un nouveau DataFrame et conserve les données d'origine inchangées. |
False |
| col_level | int ou str | Optional | Si les noms de colonnes sont un MultiIndex, spécifiez le niveau dans lequel insérer l'index. | 0 |
| col_fill | str | Optional | Si les noms de colonnes sont un MultiIndex, ceci est utilisé pour renseigner les noms de colonnes des autres niveaux lorsque l'index d'origine est converti en colonne. | '' |
Description de la valeur de retour
- Renvoie un nouveau DataFrame (si
inplace=False), ouNone(siinplace=True)。 - Dans le DataFrame renvoyé, l'index a été réinitialisé. L'index d'origine (si
drop=False) sera conservé comme nouvelle colonne.
Exemples
Maîtrisons parfaitement, à travers une série d'exemples,reset_index()l'utilisation de.
Exemple 1 : Utilisation de base - Réinitialiser l'index
L'utilisation la plus courante consiste à réinitialiser l'index sur l'index entier par défaut.
Exemple
import numpy as np
# Créer un DataFrame
data = {
'Name': ['Zhang San', 'Li Si', 'Wang Wu'],
'Score': [85, 92, 78]
}
df = pd.DataFrame(data)
print(Données d'origine (index par défaut) :)
print(df)
print("=" * 50)
# Trier les données, ce qui donne un index non contigu
df_sorted = df.sort_values(by='Score', ascending=False)
print(Données triées (indices non contigus) :)
print(df_sorted)
print("=" * 50)
# Réinitialiser l'index
df_reset = df_sorted.reset_index()
print(Après réinitialisation de l'index :)
print(df_reset)
Sortie attendue :
原始数据(默认索引): 姓名 成绩 0 张三 85 1 李四 92 2 王五 78 ================================================== 排序后的数据(索引不连续): 姓名 成绩 1 李四 92 0 张三 85 2 王五 78 ================================================== 重置索引后: 姓名 成绩 index 0 李四 92 1 # 原来的索引作为新列 1 张三 85 0 2 王五 78 2
Explication du code :
- Après le tri, l'index devient 1, 0, 2, il ne forme plus la suite continue 0, 1, 2.
- Après avoir utilisé
reset_index(), l'index est réinitialisé à 0, 1, 2. - L'index d'origine est conservé en tant que nouvelle colonne, "index".
Exemple 2 : Utiliser le paramètre drop pour supprimer l'index d'origine
Si vous n'avez pas besoin de conserver l'index d'origine, vous pouvez utiliserdrop=Trueparamètre.
Exemple
import numpy as np
# Créer un DataFrame
data = {
'Name': ['Zhang San', 'Li Si', 'Wang Wu'],
'Score': [85, 92, 78]
}
df = pd.DataFrame(data)
# Trier les données
df_sorted = df.sort_values(by='Score', ascending=False)
print("Données triées :")
print(df_sorted)
print("=" * 50)
# Réinitialiser l'index, supprimer l'index d'origine
df_reset = df_sorted.reset_index(drop=True)
print(Après réinitialisation de l'index (suppression de l'index d'origine) :)
print(df_reset)
Sortie attendue :
排序后的数据: 姓名 成绩 1 李四 92 0 张三 85 2 王五 78 ================================================== 重置索引(丢弃原索引)后: 姓名 成绩 0 李四 92 1 张三 85 2 王五 78
Explication du code :
- Après avoir utilisé
drop=True, l'index d'origine est directement supprimé et ne sera pas conservé comme nouvelle colonne. - Ceci est utile lorsque vous n'avez pas besoin de conserver les informations sur l'index d'origine.
Exemple 3 : Réinitialiser l'index après le filtrage des données
Après le filtrage des données, l'index peut être discontinu. Utilisezreset_index()pour nettoyer les données.
Exemple
import numpy as np
# Créer un DataFrame contenant toutes les notes des étudiants
data = {
'Name': ['Zhang San', 'Li Si', 'Wang Wu', 'Zhao Liu', 'Qian Qi'],
'Score': [85, 92, 78, 90, 88]
}
df = pd.DataFrame(data)
print(“Données brutes :”)
print(df)
print("=" * 50)
# Filtrer les étudiants avec des scores supérieurs à 85
df_filtered = df[df['Score'] > 85]
print(Données filtrées (indices non contigus) :)
print(df_filtered)
print("=" * 50)
# Réinitialiser l'index
df_reset = df_filtered.reset_index(drop=True)
print(Après réinitialisation de l'index :)
print(df_reset)
Sortie attendue :
原始数据: 姓名 成绩 0 张三 85 1 李四 92 2 王五 78 3 赵六 90 4 钱七 88 ================================================== 筛选后的数据(索引不连续): 姓名 成绩 1 李四 92 3 赵六 90 4 钱七 88
Explication du code :
- Après filtrage, les indices conservés sont les originaux 1, 3, 4, et non les continus 0, 1, 2.
- Utilisation
reset_index(drop=True)peut donner un indice continu, ce qui est plus pratique pour le traitement ultérieur.
Exemple 4 : Réinitialiser l'index après suppression des lignes en double
Après avoir supprimé les données en double, vous pouvez également utiliserreset_index()pour nettoyer l'index.
Exemple
import numpy as np
# Créer un DataFrame avec des lignes en double
data = {
'Nom': ['Zhang San', 'Li Si', 'Zhang San', 'Wang Wu'],
'city': ['Beijing', 'Shanghai', 'Beijing', 'Guangzhou']
}
df = pd.DataFrame(data)
print(Données originales (y compris les lignes en double) :)
print(df)
print("=" * 50)
# Supprimer les lignes répétées
df_unique = df.drop_duplicates()
print(Après suppression des lignes en double (indices non contigus) :)
print(df_unique)
print("=" * 50)
# Réinitialiser l'index
df_reset = df_unique.reset_index(drop=True)
print(Après réinitialisation de l'index :)
print(df_reset)
Sortie attendue :
原始数据(包含重复行): 姓名 城市 0 张三 北京 1 李四 上海 2 张三 北京 # 重复 3 王五 广州 ================================================== 删除重复行后(索引不连续): 姓名 城市 0 张三 北京 1 李四 上海 3 王五 广州
Explication du code :
- Après suppression des lignes en double, les indices conservés sont 0, 1, 3, et non continus 0, 1, 2.
- Après réinitialisation de l'index, les données sont plus ordonnées.
Exemple 5 : Réinitialiser l'index après avoir traité les valeurs manquantes
Après suppression des lignes avec des valeurs manquantes, l'index peut également être réinitialisé.
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)
# Supprimer les lignes avec des valeurs manquantes
df_cleaned = df.dropna()
print(Après suppression des valeurs manquantes (indices non contigus) :)
print(df_cleaned)
print("=" * 50)
# Réinitialiser l'index
df_reset = df_cleaned.reset_index(drop=True)
print(Après réinitialisation de l'index :)
print(df_reset)
Sortie attendue :
原始数据: 姓名 成绩 0 张三 85.0 1 李四 NaN # 缺失值 2 王五 92.0 3 赵六 78.0 ================================================== 删除缺失值后(索引不连续): 姓名 成绩 0 张三 85.0 2 王五 92.0 3 赵六 78.0
Explication du code :
- Après avoir supprimé la ligne 1 (le score de Li Si est NaN), les indices conservés sont 0, 2, 3.
- Utilisation
reset_index()peut donner un index continu de 0, 1, 2.
Exemple 6 : Utiliser le paramètre inplace pour modifier sur place
Utilisationinplace=Truevous pouvez modifier directement le DataFrame d'origine.
Exemple
import numpy as np
# Créer un DataFrame
data = {
'Name': ['Zhang San', 'Li Si', 'Wang Wu'],
'Score': [85, 92, 78]
}
df = pd.DataFrame(data)
# Filtrer les données
df_filtered = df[df['Score'] > 80]
print(Données filtrées (index non réinitialisé) :)
print(df_filtered)
print(fID des données : {id(df_filtered)})
print("=" * 50)
# Utiliser inplace=True pour réinitialiser l'index sur place
df_filtered.reset_index(drop=True, inplace=True)
print(Après réinitialisation avec inplace=True :)
print(df_filtered)
print(fID des données : {id(df_filtered)})
Sortie attendue :
筛选后的数据(未重置): 姓名 成绩 1 李四 92 0 张三 85 数据 id: 140234567890 ================================================== 使用 inplace=True 重置后: 姓名 成绩 0 李四 92 1 张三 85 数据 id: 140234567890 # 同一个对象
Explication du code :
- Après avoir utilisé
inplace=True, l'adresse mémoire (id) du DataFrame reste inchangée. - Cette méthode peut économiser de la mémoire.
Exemple 7 : Réinitialisation d'un index multi-niveaux
Pour un MultiIndex, vous pouvez réinitialiser des niveaux spécifiques ou tous les niveaux.
Exemple
import numpy as np
# Créer un DataFrame avec un MultiIndex
df = pd.DataFrame({
'Score': [85, 92, 78, 88, 90, 95]
}, index=pd.MultiIndex.from_tuples([
('Classe 1', 'Zhang San'), ('Classe 1', 'Li Si'), ('Classe 1', 'Wang Wu'),
('Classe 2', 'Zhao Liu'), ('Classe 2', 'Qian Qi'), ('Classe 2', 'Sun Ba')
], names=['Classe', 'Nom']))
print(Données d'origine (MultiIndex) :)
print(df)
print("=" * 50)
# Réinitialiser tous les niveaux d'index
df_reset_all = df.reset_index()
print(Réinitialiser tous les niveaux d'index :)
print(df_reset_all)
print("=" * 50)
# Réinitialiser uniquement le premier niveau d'index (Class)
df_reset_first = df.reset_index(level=0)
print(Réinitialiser uniquement l'index Class :)
print(df_reset_first)
Sortie attendue :
原始数据(多层索引):
成绩
班级 姓名
一班 张三 85
李四 92
王五 78
二班 赵六 88
钱七 90
孙八 95
==================================================
重置所有索引级别:
班级 姓名 成绩
0 一班 张三 85
1 一班 李四 92
2 一班 王五 78
3 二班 赵六 88
4 二班 钱七 90
5 二班 钱七 95
Explication du code :
- Un DataFrame avec un MultiIndex peut utiliser
reset_index()pour convertir l'index en colonnes. - Utilisez la
levelparamètre pour choisir quel niveau de l'index réinitialiser. reset_index()Le DataFrame d'origine n'est pas modifié par défaut. Pour le modifier sur place, utilisez leinplace=Trueparamètre.- Par défaut (
drop=False), l'index d'origine est conservé comme nouvelle colonne. Si vous n'avez pas besoin de le conserver, utilisezdrop=True。 - Avant d'utiliser
reset_index(), assurez-vous qu'il n'y a aucune information d'index importante à conserver. - Pour les données de séries temporelles, vous devrez peut-être réinitialiser l'index temporel après avoir réinitialisé l'index.
- Dans les opérations enchaînées (comme le filtrage puis le tri), l'index peut changer après chaque opération. L'utiliser au bon moment
reset_index()peut rendre le code prévisible.
Notes
Autres extensions
Fonctions courantes de Pandas