La semana pasada hemos visto cómo transformar una columna el índice de un DataFrame, en esta ocasión vamos a ver como se puede hacer el proceso: convertir el índice en una columna. Para lo que se usará el método reset_index()
presente en los objetos DataFrame de Pandas.
El método reset_index()
En los objetos DataFrame de Pandas se encuentra el método reset_index()
que tiene la siguiente forma
df.reset_index(level=None, drop=False, inplace=False, col_level=0, col_fill='')
en donde las propiedades más importantes son:
level
: por defecto el método restablece todos los índices del objeto, pero en el caso de los índices múltiples es posible indicar mediante esta propiedad aquellos que serán restablecidos.drop
: indica si el índice que se convierte en una columna o si este es eliminado, por defecto el valor es falso, esto es, los valores del índice se convertirán en una columna.inplace
: la propiedad indica si el método aplica las modificaciones al propio objeto o devuelve una copia modificada del mismo, por defecto el valor es falso, por lo que se obtiene una copia modificada.
Convertir el índice en una columna
Para comprobar el funcionamiento del método se puede usar el código visto la semana pasada para crear un conjunto de datos de ejemplo.
import pandas as pd users = {'first_name': ['Montgomery', 'Dagmar', 'Reeba', 'Shalom', 'Broddy', 'Aurelia'], 'last_name': ['Humes', 'Elstow', 'Wattisham', 'Alen', 'Keningham', 'Brechin'], 'age': [27, 41, 29, 29, 21, 33], 'gender': ['Male', 'Female', 'Female', 'Male', 'Male', 'Female']} df = pd.DataFrame(users) df.set_index('first_name', inplace=True) df
last_name age gender first_name Montgomery Humes 27 Male Dagmar Elstow 41 Female Reeba Wattisham 29 Female Shalom Alen 29 Male Broddy Keningham 21 Male Aurelia Brechin 33 Female
En este ejemplo se ha creado inicialmente un DataFrame con un conjunto de datos y, mediante el método set_index()
, se le ha asignado la columna con el nombre al índice. Obteniendo el objeto que se ha mostrado. Ahora se puede recuperar esta columna y generar un nuevo índice por defecto llamado al método reset_index()
sin ningún parámetro.
dfi = df.reset_index() dfi
first_name last_name age gender 0 Montgomery Humes 27 Male 1 Dagmar Elstow 41 Female 2 Reeba Wattisham 29 Female 3 Shalom Alen 29 Male 4 Broddy Keningham 21 Male 5 Aurelia Brechin 33 Female
Por defecto, los valores del índice se conservan en una nueva columna. En el caso de que no queramos conservar estos valores se puede asignar el valor verdadero a la propiedad drop
para que se eliminen estos datos, creando así un conjunto de datos más pequeño.
dfi = df.reset_index(drop=True) dfi
last_name age gender 0 Humes 27 Male 1 Elstow 41 Female 2 Wattisham 29 Female 3 Alen 29 Male 4 Keningham 21 Male 5 Brechin 33 Female
Recuperar únicamente un índice en índices múltiples
En los DataFrame que existen más de un índice es posible recuperar solo uno de estos, manteniendo los otros. Para ver esto se le puede agregar un segundo índice al DataFrame, tal como vimos la semana pasada, usando el método set_index()
con la propiedad append
a verdadero.
df.set_index('last_name', append=True, inplace=True) df
age gender first_name last_name Montgomery Humes 27 Male Dagmar Elstow 41 Female Reeba Wattisham 29 Female Shalom Alen 29 Male Broddy Keningham 21 Male Aurelia Brechin 33 Female
Ahora en el caso de usar el método reset_index()
sin ningún parámetro se recuperaran ambos índices.
dfi = df.reset_index() dfi
first_name last_name age gender 0 Montgomery Humes 27 Male 1 Dagmar Elstow 41 Female 2 Reeba Wattisham 29 Female 3 Shalom Alen 29 Male 4 Broddy Keningham 21 Male 5 Aurelia Brechin 33 Female
Aunque se puede indicar como primer parámetro del método el nombre de un índice para solamente recuperar este. Por ejemplo, para recuperar solamente los nombres se puede conseguir mediante
dfi = df.reset_index('first_name') dfi
first_name age gender last_name Humes Montgomery 27 Male Elstow Dagmar 41 Female Wattisham Reeba 29 Female Alen Shalom 29 Male Keningham Broddy 21 Male Brechin Aurelia 33 Female
Realizando las operaciones en memoria
Nótese que en los ejemplos anteriores se ha creado una copia del DataFrame con las modificaciones, por lo que los datos originales se conservaban en df
, mientras los resultados se podían consultar en dfi
. Conservar ambas copias no es un problema cuando los DataFrames son pequeños, aunque estos pueden dar problemas de memoria en otros casos. Para evitar estos problemas se puede asignar el valor verdadero a la propiedad inplace
, por lo que el objeto original se modificará y el método no devolverá ningún valor.
df.reset_index(inplace=True) df
first_name last_name age gender 0 Montgomery Humes 27 Male 1 Dagmar Elstow 41 Female 2 Reeba Wattisham 29 Female 3 Shalom Alen 29 Male 4 Broddy Keningham 21 Male 5 Aurelia Brechin 33 Female
Conclusiones
En esta entrada se ha visto cómo se puede recuperar el índice de un DataFrame y convertirlo en una columna. Un proceso que complementa al que se ha visto la semana pasada en el que vio cómo convertir una columna en un índice.
Deja una respuesta