Pandas DataFrame DataFrame.set_index() Função

Suraj Joshi 30 janeiro 2023
  1. Sintaxe de pandas.DataFrame.set_index() Método:
  2. Códigos de exemplo: definir o índice Pandas DataFrame com o método Pandas DataFrame.set_index()
  3. Códigos de exemplo: Set drop=False in Pandas DataFrame.set_index() Método
  4. Códigos de exemplo: defina inplace = True no método Pandas DataFrame.set_index
  5. Códigos de exemplo: Coluna de índice múltiplo utilizando Pandas DataFrame.set_index() Método
  6. Códigos de exemplo: Pandas Dataframe.set_index() Comportamento quando a verify_integrity é True
Pandas DataFrame DataFrame.set_index() Função

O método pandas.DataFrame.set_index() pode ser utilizado para definir arrays ou colunas de comprimento apropriado como um índice de DataFrame, mesmo após a criação do DataFrame. O novo índice set_index pode substituir o índice existente ou também pode ser expandido sobre o existente.

Sintaxe de pandas.DataFrame.set_index() Método:

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

Parâmetros

keys coluna ou lista de colunas a serem definidas como índice
drop Booleano. O valor padrão é True, que apaga a coluna a ser definida como índice
append Booleano. O valor padrão é False, e especifica se as colunas devem ser anexadas ao índice existente.
inplace Booleano. Se True, modificar o DataFrame de chamada no local
verify_integrity Booleano. Se True, aumentar o ValueError ao criar um índice com duplicatas. O valor padrão é False.

Retornar

Se inplace for True, ele retorna um objeto DataFrame com coluna de índice modificada; caso contrário, None.

Códigos de exemplo: definir o índice Pandas DataFrame com o método Pandas DataFrame.set_index()

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

O Dataframe original tem o intervalo de números como coluna de índice padrão, e em modified_df, definimos a coluna Name como o índice utilizando o método set_index().

Códigos de exemplo: Set drop=False in Pandas DataFrame.set_index() Método

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

Se definirmos drop=False no método set_index do dataframe, a coluna Name ainda permanece como uma coluna no Dataframe mesmo depois de ser definida como a coluna index.

Códigos de exemplo: defina inplace = True no método Pandas DataFrame.set_index

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

Se definirmos inplace=True no método set_index(), o chamador dataFrame será modificado no local.

Códigos de exemplo: Coluna de índice múltiplo utilizando Pandas DataFrame.set_index() Método

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

Se definirmos append=True no método set_index, ele anexa a coluna de índice recém-definida ao índice existente e tem várias colunas de índice para o único DataFrame.

Códigos de exemplo: Pandas Dataframe.set_index() Comportamento quando a verify_integrity é 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 o ValueError porque o índice tem chaves duplicadas - Apple. Ele tem duas Apple na coluna que está definida para ser o índice; portanto, ele levanta um erro se verify_integrity estiver definida para ser True no método set_index().

Suraj Joshi avatar Suraj Joshi avatar

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

LinkedIn

Artigo relacionado - Pandas DataFrame