Función Pandas df.reset_index()

Pandas 常用函数Funciones comunes de Pandas


df.reset_index()Es la función utilizada en Pandas para restablecer el índice de filas de un DataFrame.

Durante el procesamiento de datos, el índice puede volverse discontinuo o no satisfacer tus necesidades.reset_index()Puedes restablecer el índice al índice entero predeterminado (0, 1, 2, ...), o convertir el índice actual en una columna. Esto es muy útil para organizar los datos después de la limpieza, el ordenamiento o el filtrado.


Sintaxis básica y parámetros

reset_index()Es una función miembro de DataFrame, mediante el operador de punto.para invocarla.

Formato de sintaxis

DataFrame.reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill='')

Descripción de parámetros

Parámetro Tipo ¿Obligatorio? Descripción Valor predeterminado
level int, str, tuple o list Opcional Especifica el nivel de índice que se va a restablecer. Para índices múltiples (MultiIndex), se puede elegir restablecer algunos de sus niveles. De forma predeterminada, se restablecen todos los niveles. None
drop bool Opcional Si esTruedescarta el índice original y no lo convierte en columna; si esFalseconserva el índice original como una nueva columna. False
inplace bool Opcional Si esTruemodifica directamente el DataFrame original y no devuelve un nuevo objeto; si esFalsedevuelve un nuevo DataFrame y los datos originales no cambian. False
col_level int o str Opcional Si los nombres de columna son de múltiples niveles, especifica en qué nivel insertar el índice. 0
col_fill str Opcional Si los nombres de columna son de múltiples niveles, se utiliza para rellenar los nombres de columna de otros niveles cuando el índice original se convierte en columna. ''

Descripción del valor de retorno

  • Devuelve un nuevo DataFrame (siinplace=False), oNone(siinplace=True)。
  • En el DataFrame devuelto, el índice se ha restablecido; el índice original (sidrop=False) se conserva como una nueva columna.

Ejemplos

A través de una serie de ejemplos, dominaremos por completoreset_index()el uso de la función.

Ejemplo 1: Uso básico - Restablecer el índice

El uso más común es restablecer el índice al índice entero predeterminado.

Ejemplo

import pandas as pd
import numpy as np

# Crear un DataFrame
data = {
    'Nombre': ['Zhang San', 'Li Si', 'Wang Wu'],
    'Calificaciones': [85, 92, 78]
}
df = pd.DataFrame(data)

print("Datos originales (índice predeterminado):")
print(df)
print("=" * 50)

# Ordenar los datos provoca que el índice no sea continuo
df_sorted = df.sort_values(by='Calificaciones', ascending=False)

print("Datos ordenados (índices no consecutivos):")
print(df_sorted)
print("=" * 50)

# Restablecer índice
df_reset = df_sorted.reset_index()

print(Después de restablecer el índice:)
print(df_reset)

Resultado esperado:

原始数据(默认索引):
   姓名  成绩
0  张三   85
1  李四   92
2  王五   78
==================================================
排序后的数据(索引不连续):
   姓名  成绩
1  李四   92
0  张三   85
2  王五   78
==================================================
重置索引后:
   姓名  成绩  index
0  李四   92       1  # 原来的索引作为新列
1  张三   85       0
2  王五   78       2

Análisis del código:

  1. Después de ordenar, el índice se convirtió en 1, 0, 2, ya no es continuo 0, 1, 2.
  2. Al usarreset_index()después, el índice se restablece a 0, 1, 2.
  3. El índice original se conserva como una nueva columna "index".

Ejemplo 2: Usar el parámetro drop para descartar el índice original

Si no necesitas conservar el índice original, puedes usardrop=Trueel parámetro.

Ejemplo

import pandas as pd
import numpy as np

# Crear un DataFrame
data = {
    'Nombre': ['Zhang San', 'Li Si', 'Wang Wu'],
    'Calificaciones': [85, 92, 78]
}
df = pd.DataFrame(data)

# Ordenar datos
df_sorted = df.sort_values(by='Calificaciones', ascending=False)

print(Datos ordenados:)
print(df_sorted)
print("=" * 50)

# Restablecer el índice y descartar el índice original
df_reset = df_sorted.reset_index(drop=True)

print(Después de restablecer el índice (descartando el índice original):)
print(df_reset)

Resultado esperado:

排序后的数据:
   姓名  成绩
1  李四   92
0  张三   85
2  王五   78
==================================================
重置索引(丢弃原索引)后:
   姓名  成绩
0  李四   92
1  张三   85
2  王五   78

Análisis del código:

  • Al usardrop=Truedespués, el índice original se descarta directamente y no se conserva como nueva columna.
  • Esto es útil cuando no se necesita conservar la información del índice original.

Ejemplo 3: Restablecer el índice después de filtrar datos

Después de filtrar los datos, el índice puede quedar discontinuo; usandoreset_index()puedes organizar los datos.

Ejemplo

import pandas as pd
import numpy as np

# Crear un DataFrame con las calificaciones de todos los estudiantes
data = {
    'Nombre': ['Zhang San', 'Li Si', 'Wang Wu', 'Zhao Liu', 'Qian Qi'],
    'Calificaciones': [85, 92, 78, 90, 88]
}
df = pd.DataFrame(data)

print("datos originales:")
print(df)
print("=" * 50)

# Filtrar estudiantes con calificaciones mayores que 85
df_filtered = df[df['Calificaciones'] > 85]

print("Datos filtrados (índices no consecutivos):")
print(df_filtered)
print("=" * 50)

# Restablecer índice
df_reset = df_filtered.reset_index(drop=True)

print(Después de restablecer el índice:)
print(df_reset)

Resultado esperado:

原始数据:
   姓名  成绩
0  张三   85
1  李四   92
2  王五   78
3  赵六   90
4  钱七   88
==================================================
筛选后的数据(索引不连续):
   姓名  成绩
1  李四   92
3  赵六   90
4  钱七   88

Análisis del código:

  • Después del filtrado, se conservan los índices originales 1, 3, 4, no los continuos 0, 1, 2.
  • Al usarreset_index(drop=True)se obtienen índices continuos, lo que facilita el procesamiento posterior.
  • Ejemplo 4: Restablecer el índice después de eliminar filas duplicadas

    Después de eliminar datos duplicados, también puedes usarreset_index()para organizar el índice.

    Ejemplo

    import pandas as pd
    import numpy as np

    # Crear un DataFrame que contenga filas duplicadas
    data = {
        'Nombre': ['Zhang San', 'Li Si', 'Zhang San', 'Wang Wu'],
        'Ciudad': ['Pekín', Shanghái, 'Pekín', 'Guangzhou']
    }
    df = pd.DataFrame(data)

    print("Datos originales (con filas duplicadas):")
    print(df)
    print("=" * 50)

    # Eliminar filas duplicadas
    df_unique = df.drop_duplicates()

    print(Después de eliminar filas duplicadas (índices no consecutivos):)
    print(df_unique)
    print("=" * 50)

    # Restablecer índice
    df_reset = df_unique.reset_index(drop=True)

    print(Después de restablecer el índice:)
    print(df_reset)

    Resultado esperado:

    原始数据(包含重复行):
       姓名  城市
    0  张三  北京
    1  李四  上海
    2  张三  北京  # 重复
    3  王五  广州
    ==================================================
    删除重复行后(索引不连续):
       姓名  城市
    0  张三  北京
    1  李四  上海
    3  王五  广州
    

    Análisis del código:

    • Después de eliminar las filas duplicadas, los índices retenidos son 0, 1, 3, no los continuos 0, 1, 2.
    • Después de restablecer el índice, los datos quedan más ordenados.
    • Ejemplo 5: Restablecer el índice después de manejar valores faltantes

      Después de eliminar las filas con valores faltantes, también puedes restablecer el índice.

      Ejemplo

      import pandas as pd
      import numpy as np

      # Crear un DataFrame que contenga valores faltantes
      data = {
          'Nombre': ['Zhang San', 'Li Si', 'Wang Wu', 'Zhao Liu'],
          'Calificaciones': [85, np.nan, 92, 78]
      }
      df = pd.DataFrame(data)

      print("datos originales:")
      print(df)
      print("=" * 50)

      # Eliminar filas con valores faltantes
      df_cleaned = df.dropna()

      print(Después de eliminar valores faltantes (índices no consecutivos):)
      print(df_cleaned)
      print("=" * 50)

      # Restablecer índice
      df_reset = df_cleaned.reset_index(drop=True)

      print(Después de restablecer el índice:)
      print(df_reset)

      Resultado esperado:

      原始数据:
         姓名   成绩
      0  张三  85.0
      1  李四   NaN  # 缺失值
      2  王五  92.0
      3  赵六  78.0
      ==================================================
      删除缺失值后(索引不连续):
         姓名   成绩
      0  张三  85.0
      2  王五  92.0
      3  赵六  78.0
      

      Análisis del código:

      • Después de eliminar la fila 1 (la calificación de Li Si es NaN), los índices retenidos son 0, 2, 3.
      • Al usarreset_index()se pueden obtener los índices continuos 0, 1, 2.
      • Ejemplo 6: Modificar en el lugar usando el parámetro inplace

        Al usarinplace=Truepuedes modificar directamente el DataFrame original.

        Ejemplo

        import pandas as pd
        import numpy as np

        # Crear un DataFrame
        data = {
            'Nombre': ['Zhang San', 'Li Si', 'Wang Wu'],
            'Calificaciones': [85, 92, 78]
        }
        df = pd.DataFrame(data)

        # Filtrar datos
        df_filtered = df[df['Calificaciones'] > 80]

        print("Datos filtrados (sin restablecer):")
        print(df_filtered)
        print(fid de datos: {id(df_filtered)})
        print("=" * 50)

        # Restablecer el índice in situ con inplace=True
        df_filtered.reset_index(drop=True, inplace=True)

        print(Después de restablecer con inplace=True:)
        print(df_filtered)
        print(fid de datos: {id(df_filtered)})

        Resultado esperado:

        筛选后的数据(未重置):
           姓名  成绩
        1  李四   92
        0  张三   85
        数据 id: 140234567890
        ==================================================
        使用 inplace=True 重置后:
           姓名  成绩
        0  李四   92
        1  张三   85
        数据 id: 140234567890  # 同一个对象
        

        Análisis del código:

        • Tras usarinplace=Truela dirección de memoria (id) del DataFrame no cambia.
        • Este método puede ahorrar memoria.
        • Ejemplo 7: Restablecimiento de índices múltiples

          Para un índice multinivel (MultiIndex), se pueden restablecer niveles específicos o todos los niveles.

          Ejemplo

          import pandas as pd
          import numpy as np

          # Crear un DataFrame con índice multinivel
          df = pd.DataFrame({
              'Calificaciones': [85, 92, 78, 88, 90, 95]
          }, index=pd.MultiIndex.from_tuples([
              ('Clase 1', 'Zhang San'), ('Clase 1', 'Li Si'), ('Clase 1', 'Wang Wu'),
              ('Clase 2', 'Zhao Liu'), ('Clase 2', 'Qian Qi'), ('Clase 2', 'Sun Ba')
          ], names=['Clase', 'Nombre']))

          print(Datos originales (índice multinivel):)
          print(df)
          print("=" * 50)

          # Restablecer todos los niveles de índice
          df_reset_all = df.reset_index()

          print(Restablecer todos los niveles de índice:)
          print(df_reset_all)
          print("=" * 50)

          # Restablecer solo el primer nivel de índice (clase)
          df_reset_first = df.reset_index(level=0)

          print(Restablecer solo el índice de clase:)
          print(df_reset_first)

          Resultado esperado:

          原始数据(多层索引):
                     成绩
          班级  姓名
          一班  张三     85
               李四     92
               王五     78
          二班  赵六     88
               钱七     90
               孙八     95
          ==================================================
          重置所有索引级别:
             班级  姓名  成绩
          0  一班  张三   85
          1  一班  李四   92
          2  一班  王五   78
          3  二班  赵六   88
          4  二班  钱七   90
          5  二班  钱七   95
          

          Análisis del código:

          • Un DataFrame con índice multinivel puede usarreset_index()para convertir los índices en columnas.
          • Usando ellevelparámetro, se puede elegir qué nivel de índice restablecer.

          • Notas

            • reset_index()De forma predeterminada, no se modifica el DataFrame original; si desea modificarlo en su lugar, useinplace=Trueel parámetro.
            • De forma predeterminada (drop=False), el índice original se conserva como una nueva columna. Si no es necesario conservarlo, usedrop=True。
            • Antes de usarreset_index()asegúrese de que no haya información importante del índice que deba conservarse.
            • Para datos de series temporales, después de restablecer el índice, es posible que deba volver a configurar el índice de tiempo.
            • En operaciones encadenadas (como filtrar y luego ordenar), el índice puede cambiar después de cada operación; el uso oportuno dereset_index()puede mantener la previsibilidad del código.

            Pandas 常用函数Funciones comunes de Pandas

            Otras extensiones