Función Pandas df.reset_index()
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 (si
inplace=False), oNone(siinplace=True)。 - En el DataFrame devuelto, el índice se ha restablecido; el índice original (si
drop=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 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:
- Después de ordenar, el índice se convirtió en 1, 0, 2, ya no es continuo 0, 1, 2.
- Al usar
reset_index()después, el índice se restablece a 0, 1, 2. - 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 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 usar
drop=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 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 usar
reset_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 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 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 usar
reset_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 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 usar
inplace=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 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 usar
reset_index()para convertir los índices en columnas. - Usando el
levelparámetro, se puede elegir qué nivel de índice restablecer. 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 usar
reset_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 de
reset_index()puede mantener la previsibilidad del código.
Notas
Otras extensiones
Funciones comunes de Pandas