Fonction df.reset_index() de Pandas

Pandas 常用函数Fonctions courantes 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 (siinplace=False), ouNone(siinplace=True)。
  • Dans le DataFrame renvoyé, l'index a été réinitialisé. L'index d'origine (sidrop=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 pandas as pd
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 :

  1. Après le tri, l'index devient 1, 0, 2, il ne forme plus la suite continue 0, 1, 2.
  2. Après avoir utiliséreset_index(), l'index est réinitialisé à 0, 1, 2.
  3. 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 pandas as pd
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 pandas as pd
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.
  • Utilisationreset_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 pandas as pd
    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 pandas as pd
      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.
      • Utilisationreset_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 pandas as pd
        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 pandas as pd
          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 utiliserreset_index()pour convertir l'index en colonnes.
          • Utilisez lalevelparamètre pour choisir quel niveau de l'index réinitialiser.

          • Notes

            • 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'utiliserreset_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 momentreset_index()peut rendre le code prévisible.

            Pandas 常用函数Fonctions courantes de Pandas

            Autres extensions