Función Pandas DataFrame DataFrame.set_index()

Suraj Joshi 30 enero 2023
  1. Sintaxis del método pandas.DataFrame.set_index():
  2. Códigos de ejemplo: Establece el índice del DataFrame de Pandas con el método DataFrame.set_index() de Pandas
  3. Códigos de ejemplo: Establece drop=False en el DataFrame.set_index() método de Pandas
  4. Códigos de ejemplo: Establecer inplace=True en el método DataFrame.set_index de Pandas
  5. Códigos de ejemplo: Establecer una columna de índice múltiple usando el método DataFrame.set_index() de Pandas
  6. Códigos de ejemplo: Pandas Dataframe.set_index() Comportamiento cuando verify_integrity es True
Función Pandas DataFrame DataFrame.set_index()

El método pandas.DataFrame.set_index() se puede utilizar para establecer matrices o columnas de longitud apropiada como índice del DataFrame incluso después de la creación del DataFrame. El nuevo índice establecido puede reemplazar al índice existente o también puede ser expandido sobre el existente.

Sintaxis del método pandas.DataFrame.set_index():

DataFrame.set_index(
    keys, drop=True, append=False, inplace=False, verify_integrity=False
)

Parámetros

keys columna o lista de columnas que se fijarán como índice
drop Booleana. El valor por defecto es True que borra la columna a establecer como índice
append Booleana. El valor por defecto es False, y especifica si se añaden columnas al índice existente.
inplace Booleana. Si True, modifica el llamador DataFrame en el lugar
verificar_integridad Booleana. Si True, sube ValueError al crear un índice con duplicados. El valor por defecto es False.

Retorna

Si inplace es True, devuelve un objeto DataFrame con la columna de índice modificada; de lo contrario None.

Códigos de ejemplo: Establece el índice del DataFrame de Pandas con el método DataFrame.set_index() de Pandas

import pandas as pd
fruit_list = [ ('Orange', 34, 'Yes' ,'ABC') ,
             ('Mango', 24, 'No','ABC' ) ,
             ('banana', 14, 'No','ABC' ) ,
             ('Apple', 44, 'Yes',"XYZ" ) ]

df = pd.DataFrame(fruit_list, 
                  columns = ['Name',
                             'Price',
                             'In_Stock',
                             'Supplier']) 
print(df)
df_modified=df.set_index("Name")
print(df_modified)

Resultado:

        Name  Price In_Stock Supplier
0     Orange     34      Yes      ABC
1      Mango     24       No      ABC
2     banana     14       No      ABC
3      Apple     44      Yes      XYZ
4  Pineapple     64       No      XYZ
5       Kiwi     84      Yes      XYZ
           Price In_Stock Supplier
Name                              
Orange        34      Yes      ABC
Mango         24       No      ABC
banana        14       No      ABC
Apple         44      Yes      XYZ
Pineapple     64       No      XYZ
Kiwi          84      Yes      XYZ

El DataFrame original tiene el rango de números como columna de índice por defecto, y en modified_df, establecemos la columna Name como índice usando el método set_index().

Códigos de ejemplo: Establece drop=False en el DataFrame.set_index() método de Pandas

import pandas as pd
fruit_list = [ ('Orange', 34, 'Yes' ,'ABC') ,
             ('Mango', 24, 'No','ABC' ) ,
             ('banana', 14, 'No','ABC' ) ,
             ('Apple', 44, 'Yes',"XYZ" )  ]

df = pd.DataFrame(fruit_list, 
                  columns = ['Name',
                             'Price',
                             'In_Stock',
                             'Supplier']) 
print(df)

df_modified=df.set_index("Name",drop=False)

print(df_modified)

Resultado:

     Name  Price In_Stock Supplier
0  Orange     34      Yes      ABC
1   Mango     24       No      ABC
2  banana     14       No      ABC
3   Apple     44      Yes      XYZ
          Name  Price In_Stock Supplier
Name                                   
Orange  Orange     34      Yes      ABC
Mango    Mango     24       No      ABC
banana  banana     14       No      ABC
Apple    Apple     44      Yes      XYZ

Si establecemos drop=False en el método set_index del dataframe, la columna Name sigue siendo una columna en el Dataframe incluso después de ser establecida como la columna index.

Códigos de ejemplo: Establecer inplace=True en el método DataFrame.set_index de Pandas

import pandas as pd

fruit_list = [ ('Orange', 34, 'Yes' ,'ABC') ,
             ('Mango', 24, 'No','ABC' ) ,
             ('banana', 14, 'No','ABC' ) ,
             ('Apple', 44, 'Yes',"XYZ" )  ]

df = pd.DataFrame(fruit_list, columns = ['Name' , 'Price', 'In_Stock',"Supplier"]) 
print("Before Setting Index:")
print(df)
df.set_index("Name",inplace=True)
print("After Setting Index:")
print(df)

Resultado:

Before Setting Index:
     Name  Price In_Stock Supplier
0  Orange     34      Yes      ABC
1   Mango     24       No      ABC
2  banana     14       No      ABC
3   Apple     44      Yes      XYZ
After Setting Index:
        Price In_Stock Supplier
Name                           
Orange     34      Yes      ABC
Mango      24       No      ABC
banana     14       No      ABC
Apple      44      Yes      XYZ

Si ponemos inplace=True en el método set_index(), el llamador DataFrame se modifica en el lugar.

Códigos de ejemplo: Establecer una columna de índice múltiple usando el método DataFrame.set_index() de Pandas

import pandas as pd

fruit_list = [ ('Orange', 34, 'Yes' ,'ABC') ,
             ('Mango', 24, 'No','ABC' ) ,
             ('banana', 14, 'No','ABC' ) ,
             ('Apple', 44, 'Yes',"XYZ" )  ]

df = pd.DataFrame(fruit_list, columns = ['Name' , 'Price', 'In_Stock',"Supplier"]) 
print("Before Setting Index:")
print(df)
df.set_index("Name",append=True,inplace=True,drop=False)
print("After Setting Index:")
print(df)

Resultado:

Before Setting Index:
     Name  Price In_Stock Supplier
0  Orange     34      Yes      ABC
1   Mango     24       No      ABC
2  banana     14       No      ABC
3   Apple     44      Yes      XYZ
After Setting Index:
            Name  Price In_Stock Supplier
  Name                                   
0 Orange  Orange     34      Yes      ABC
1 Mango    Mango     24       No      ABC
2 banana  banana     14       No      ABC
3 Apple    Apple     44      Yes      XYZ

Si establecemos append=True en el método set_index, agrega la columna de índice recién establecida al índice existente y tiene múltiples columnas de índice para el único DataFrame.

Códigos de ejemplo: Pandas Dataframe.set_index() Comportamiento cuando verify_integrity es True

import pandas as pd

fruit_list = [
    ("Orange", 34, "Yes", "ABC"),
    ("Mango", 24, "No", "ABC"),
    ("Apple", 14, "No", "ABC"),
    ("Apple", 44, "Yes", "XYZ"),
]

df = pd.DataFrame(fruit_list, columns=["Name", "Price", "In_Stock", "Supplier"])

df_modified = df.set_index("Name", verify_integrity=True)
print(df_modified)

Resultado:

Traceback (most recent call last):
  .....line 3920, in set_index
    dup=duplicates))
ValueError: Index has duplicate keys: Index(['Apple'], dtype='object', name='Name')

Aumenta el ValueError porque el índice tiene claves duplicadas - Apple. Tiene dos Apple en la columna que es el índice; por lo tanto, aumenta el error si verify_integrity es True en el método set_index().

Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

Artículo relacionado - Pandas DataFrame