Post

Desbravando o Pandas - Parte 3 - Índices e seleção

Continuando com Pandas, desta vez mostrando o básico de Índices e como seleciona-los.

Desbravando o Pandas - Parte 3 - Índices e seleção

Neste documento continuaremos explorarando os conceitos iniciais da biblioteca Pandas. Para acompanhamento utilizaremos a mesma base do 🔗Desbravando o Pandas - Parte 1 - Estrutura de dados e seguirei com as mesmas estruturas criadas previamente.


Índices

Toda estrutura do tipo DataFrame possui índices, os índices no pandas são essenciais para organizar e acessar dados dentro de um DataFrame ou Series. Eles funcionam como identificadores únicos para as linhas, facilitando buscas, filtragens e operações avançadas.

Existem três tipos de índices, sendo eles:

  • Índices númericos.
  • Índices textuais(Labels).
  • Índices multi-nível(MultiIndex).

DataFrame com índices númericos

Normalmente os índices são do tipo númerico por padrão, do valor 0 ao número de linhas do DataFrame - 1, mas também pode ser do tipo textual(rótuos/labels).

1
df_data

Bloco 1 Índices criado por padrão no DataFrame df_data

Observe que o índice do DataFrame df_data não possui uma coluna especifica para ele. Para recuperar o index no Pandas, basta utilizar o método index:

1
df_data.index

Bloco 2 Índices no DataFrame df_data, com ínicio no 0 e fim em 105018

DataFrame com índices textuais (Labels)

Um índice textual no pandas é quando usamos valores de texto (strings) como índice em um DataFrame ou Series. Isso facilita buscas e manipulações, tornando os dados mais legíveis e organizados.

1
2
3
4
5
6
7
satisfacao_labels = pd.DataFrame({
    'bom': [50,21,100],
    'ruim': [131,2,30],
    'pessimo': [30,20,1]
}, index = ['Ford','volkswagen', 'BMW'])

satisfacao_labels

Bloco 3 Retorno do DataFrame criado satisfacao_labels, com índíce textual

1
satisfacao_labels.index

Bloco 4 Índices no DataFrame satisfacao_labels, contendo ‘Ford’, ‘volkswagen’ e ‘BMW’

DataFrame com índices multi-nível (MultiIndex)

O MultiIndex no pandas permite criar índices hierárquicos, ou seja, um índice composto por múltiplas colunas. Isso é útil para organizar e acessar dados estruturados de forma mais eficiente.

Podemos definir múltiplas colunas como índice usando set_index():

1
2
3
4
5
6
7
8
9
MultiIndex = pd.DataFrame({
    'categoria': ['A', 'A', 'B', 'B'],
    'produto': ['P1', 'P2', 'P1', 'P2'],
    'vendas': [100, 150, 200, 250]
})

MultiIndex.set_index(['categoria', 'produto'], inplace=True)

MultiIndex

Bloco 5 Retorno do DataFrame MultiIndex com índice multi-nível

1
MultiIndex.index

Bloco 6 Índices no DataFrame MultiIndex, contendo dois índices, categoria e produto

Para resetar o índex ao padrão original, basta usar MultiIndex.reset_index(inplace=True)


Seleção de Índex

A seleção de índice nos permite acessar, organizar e manipular os dados de um DataFrame. O índice funciona como um identificador único para as linhas, possibilitando assim buscas rápidas, segmentação e operações estruturadas.

Seleção baseada em índices

Para mostrar linhas especificas de um DataFrame, usa-se:

iloc : Seleciona elementos de um DataFrame, baseando-se em índices númericos

Selecionando uma amostra/linha

1
df_data.iloc[1] ## Extraíndo a linha com o índice 1

Bloco 7 Índice 1 no DataFrame df_data

1
df_data.iloc[1,6] ## Extraíndo a linha com índice 1 e coluna 6 (Faixa Etária)

Bloco 8 Índice 1 e coluna 6 no DataFrame df_data

Selecionando múltiplas amostras/linhas

Uma das formas de se fazer isso é utilizando slicing, passando um intervalo dos nossos valores

1
df_data.iloc[:3] ## Extraíndo as linhas com índice >= 0 e <= 2

Bloco 9 Retorno da extração das linhas 0,1 e 2 do DataFrame df_data

1
df_data.iloc[10:13] ## Extraíndo as linhas com índice >= 10 e <= 12

Bloco 10 Retorno da extração das linhas 10,11 e 12 do DataFrame df_data

1
df_data.iloc[1,5,10] ## Extraíndo as linhas com índice 1,5 e 10

Bloco 11 Retorno da extração das linhas 1,5 e 10 do DataFrame df_data

Seleção baseada em label

Para seleccionar elementos do DataFrame pelo seu rótulo/label usa se:

loc : Seleciona elementos de um DataFrame, baseando-se em rótulo.

1
satisfacao_labels.loc['Ford'] ## Retorna a linha cujo o rótulo do índice é 'Ford'

Bloco 12 Retorno da extração do label ‘Ford’ do DataFrame satisfacao_labels

Semelhante ao iloc podemos selecionar linha e coluna baseando no label

1
satisfacao_labels.loc['Ford','ruim']

Bloco 13 Retorno da extração do label ‘Ford’ da coluna ‘ruim’ do DataFrame satisfacao_labels

Se quisermos buscar apenas as colunas ‘ruim’ e ‘pessimo’ do DataFrame satisfacao_labels, existem duas possibilidades:

1
2
## Forma 1:
satisfacao_labels[['ruim','pessimo']] ## Retorna todas as linhas do DataFrame mas apenas as colunas 'ruim' e 'pessimo'

Bloco 14 Retorno da extração de todas as linhas e apenas as colunas ‘ruim’ e ‘pessimo’ do DataFrame satisfacao_labels

1
2
## Forma 2
satisfacao_labels.loc[:,['ruim','pessimo']] ## Retorna os índices 0 a n-1 (:) mas apenas as colunas 'ruim' e 'pessimo'

Bloco 15 Retorno da extração de todas as linhas e apenas as colunas ‘ruim’ e ‘pessimo’ do DataFrame satisfacao_labels

Mesmo em DataFrame com índices baseados em rótulos, é possível a utilização do iloc para selecionar elementos baseando-se em seu índice implícito, por exemplo, se quisermos seleccionar a linha 2 do DataFrame satisfacao_labels basta:

1
satisfacao_labels.iloc[2] ## Retorna a linha de índice 2 (BMW) do DataFrame

Bloco 16 Retorno da extração da linha de índice 2 (BMW)do DataFrame satisfacao_labels

Índices números, por default, possuem rótulos que correspondem aos seus valores númericos. Ou seja, é possível usar o iloc e loc para índices númericos.

Seleção de uma ou mais colunas

Já vimos que para selecionar uma coluna de um DataFrame(df_data) basta utilizar df_data['Cidade'] , df_data.Cidade (Este, apenas para casos com colunas sem caracteres especiais e sem espaço) ou data.loc[:, 'Cidade'] .

Para retorno de mais de uma coluna é necessário passar uma lista [‘Colune 1’,’Coluna 2’,’Coluna 3’, ‘…’]

1
df_data[['Cidade','UF','Região']] ## Retorna a coluna 'Cidade', 'UF' e 'Região'

Bloco 17 Retorno da extração de todas as linha das colunas ‘Cidade’, ‘UF’ e ‘Região’

Seleção de índices MultiIndex

Para identificar os níveis do índex do tipo MultiIndex, utilizaremos o método index.levels

1
MultiIndex

Bloco 18 Retorno do DataFrame MultiIndex

1
MultiIndex.index.levels

Bloco 19 Retorno dos níveis do DataFrame MultiIndex

Para identificar os valores do nível 1 e 2 respectivamente, usamos o método get_level_values(n), com n sendo o level do índice.

1
MultiIndex.index.get_level_values(0)  ## Retorna os valores do primeiro nível Categoria

Bloco 20 Retorno dos nível de Categoria do DataFrame MultiIndex

1
MultiIndex.index.get_level_values(1)  ## Retorna os valores do segundo nível Produto

Bloco 21 Retorno dos nível de Produto do DataFrame MultiIndex

Para extrair informações de índices MultiIndex devemos passar os n índices requeridos através do método loc

1
MultiIndex.loc[('A', 'P1')]  ## Retorna o valor referente ao índice 1 (Categoria) textual 'A' e ao índice 2 (Produto) textual 'P1'

Bloco 22 Retorno da busca referente ao índice 1 (Categoria) textual ‘A’ e ao índice 2 (Produto) textual ‘P1’ do DataFrame MultiIndex

1
MultiIndex.loc[(['A', 'B'], ['P1']), :] ## Retorna o valor referente ao índice 1 (Categoria) textual 'A' e 'B' e ao índice 2 (Produto) textual 'P1'

Bloco 23 Retorno referente ao índice 1 (Categoria) textual ‘A’ e ‘B’ e ao índice 2 (Produto) textual ‘P1 do DataFrame MultiIndex

  1. (['A', 'B'], ['P1']) :
    • O primeiro nível (categoria) recebe uma lista [‘A’, ‘B’], garantindo que ambas sejam selecionadas.
    • O segundo nível (produto) também recebe uma lista [‘P1’], garantindo que apenas P1 seja selecionado.
  2. Adição de : (dois pontos) :
    • Necessário para indicar que queremos todas as colunas.

Resumo dos métodos

MétodoDescrição
.indexRetornar o objeto índice
.set_index(coluna)Define uma coluna como índice
.reset_index()Remove o índice e transforma-o em coluna
.loc[indice]Acessa dados pelo valor do índice
.iloc[posição]Acessa dados pela posição numérica
.sort_index()Ordena o DataFrame pelo índice
.droplevel(nível)Remove um nível de um índice multi-nível

Para download do notebook utilizado, acesse o 🔗Link

Esta postagem está licenciada sob CC BY 4.0 pelo autor.