0Pricing
Pandas & NumPy Academy · Aula

Definindo e redefinindo o índice

Promova uma coluna a índice das linhas com set_index(), redefina-a com reset_index() e use uma visão geral de um MultiIndex.

Definindo e redefinindo o índice é uma aula grátis de Pandas & NumPy Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Pandas & NumPy Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Pandas & NumPy Academy inclui 4 aulas no total.

O que é o índice do DataFrame?

Todo DataFrame do Pandas tem um índice de linhas — um conjunto de rótulos associados a cada linha. O índice padrão é um RangeIndex (0, 1, 2, …), mas você pode substituí-lo por qualquer coluna que funcione como um identificador natural: uma data, um ID de produto, um ID de usuário ou qualquer chave exclusiva. Um índice significativo melhora a legibilidade, permite a seleção baseada em rótulos e é necessário para a reamostragem de séries temporais.

import pandas as pd

df = pd.DataFrame({
    'date': ['2024-01-01', '2024-01-02', '2024-01-03'],
    'sales': [100, 200, 150]
})
print('Default index:', df.index.tolist())  # [0, 1, 2]
print(df)

set_index() — promovendo uma coluna

DataFrame.set_index('col') promove a coluna especificada para se tornar o índice de linhas, removendo-a das colunas regulares. Os valores da coluna tornam-se rótulos de linha. Essa é a forma padrão de tornar um DataFrame mais expressivo quando uma coluna funciona como uma chave natural. Um novo DataFrame é retornado; o original permanece inalterado, a menos que inplace=True seja usado.

import pandas as pd

df = pd.DataFrame({
    'date': ['2024-01-01', '2024-01-02', '2024-01-03'],
    'sales': [100, 200, 150]
})

df = df.set_index('date')
print(df)
#             sales
# date
# 2024-01-01    100
# 2024-01-02    200
# 2024-01-03    150

print(df.index)  # Index(['2024-01-01', ...], dtype='object', name='date')

Selecionando linhas com um índice personalizado

Depois que uma coluna significativa se torna o índice, você pode usar .loc[label] para recuperar linhas pelo rótulo com uma sintaxe limpa e legível — sem precisar de máscaras booleanas. Para um DatetimeIndex, você pode até usar textos de data parciais, como df.loc['2024-01'], para selecionar todas as linhas de janeiro de 2024.

import pandas as pd

df = pd.DataFrame({
    'product': ['A', 'B', 'C'],
    'price': [10, 20, 30],
    'stock': [100, 50, 75]
})
df = df.set_index('product')

# Access row by label
print(df.loc['B'])
# price    20
# stock    50
# Name: B, dtype: int64

set_index() com várias colunas — MultiIndex

Passar uma lista de nomes de colunas para set_index() cria um MultiIndex (índice hierárquico). O DataFrame resultante pode ser acessado usando tuplas em .loc[]. O MultiIndex é essencial para séries temporais agrupadas (região + data), dados em painel (entidade + tempo) e qualquer análise que exija agrupamento de linhas em dois níveis.

import pandas as pd

df = pd.DataFrame({
    'region': ['East', 'East', 'West', 'West'],
    'year': [2023, 2024, 2023, 2024],
    'revenue': [100, 150, 200, 220]
})

df = df.set_index(['region', 'year'])
print(df)
#              revenue
# region year
# East   2023      100
#        2024      150
# West   2023      200
#        2024      220

print(df.loc[('East', 2024)])  # revenue = 150

Parâmetro drop= em set_index()

Por padrão, set_index('col') remove a coluna das colunas regulares do DataFrame assim que ela se torna o índice. Passe drop=False para manter a coluna no lugar e também usá-la como índice. Isso é útil quando você deseja acesso baseado em rótulos, mas também precisa da coluna disponível para cálculos no espaço das colunas regulares.

import pandas as pd

df = pd.DataFrame({'id': [1, 2, 3], 'value': [10, 20, 30]})

# Keep 'id' as both index and column
df_with_both = df.set_index('id', drop=False)
print(df_with_both)
#     id  value
# id
# 1    1     10
# 2    2     20
# 3    3     30

reset_index() — movendo o índice de volta para uma coluna

reset_index() é o inverso de set_index(): move o índice de linhas atual de volta para uma coluna regular e substitui o índice pelo RangeIndex padrão. Isso é normalmente necessário após um groupby().agg() ou depois de operações que deixam você com um índice significativo que precisa ser usado como coluna em um processamento posterior.

import pandas as pd

df = pd.DataFrame({'sales': [100, 200]}, index=['East', 'West'])
df.index.name = 'region'

reset = df.reset_index()
print(reset)
#   region  sales
# 0   East    100
# 1   West    200

print(reset.index.tolist())  # [0, 1] — default RangeIndex restored

reset_index(drop=True)

Passar drop=True para reset_index() descarta completamente o índice atual, em vez de movê-lo para uma coluna. Use isso quando o índice atual não contiver informações significativas (por exemplo, após filtrar linhas, quando o índice tem lacunas como 0, 3, 7) e você quiser apenas um índice sequencial limpo começando em 0.

import pandas as pd

df = pd.DataFrame({'x': [10, 20, 30, 40, 50]})
filtered = df[df['x'] > 15]
print('Filtered index:', filtered.index.tolist())  # [1, 2, 3, 4]

# Drop the old index — don't move it to a column
clean = filtered.reset_index(drop=True)
print('Clean index:', clean.index.tolist())  # [0, 1, 2, 3]

reset_index() após groupby

Depois de chamar groupby().agg(), as chaves de agrupamento tornam-se o índice. Chamar reset_index() as converte novamente em colunas regulares, produzindo um resultado tabular simples, mais fácil de manipular, combinar ou exportar. Esse é um dos usos mais comuns de reset_index() na prática.

import pandas as pd

df = pd.DataFrame({
    'dept': ['Eng', 'HR', 'Eng', 'Sales', 'HR'],
    'salary': [90000, 50000, 80000, 70000, 55000]
})

# After groupby, dept becomes the index
agg = df.groupby('dept')['salary'].mean()
print(type(agg), agg.index.tolist())
# dept is the index

# Reset makes dept a regular column again
result = agg.reset_index()
result.columns = ['dept', 'avg_salary']
print(result)

rename_axis() para nomear o índice

Quando o índice de linhas não tem nome, ou quando você quer renomeá-lo para maior clareza, use df.rename_axis('new_name') (para o índice de linhas) ou df.rename_axis('col_name', axis=1) (para o eixo das colunas). Dar um nome significativo ao índice torna o resultado mais autoexplicativo, especialmente ao exportar para CSV, quando o nome do índice se torna um cabeçalho de coluna.

import pandas as pd

df = pd.DataFrame({'sales': [100, 200, 300]}, index=['A', 'B', 'C'])
print(df.index.name)  # None

# Name the index
df = df.rename_axis('region')
print(df)
#         sales
# region
# A         100
# B         200
# C         300

Reindexação para preencher lacunas

DataFrame.reindex(new_index) remodela o DataFrame para corresponder a um novo índice, preenchendo com NaN as posições que existem no novo índice, mas não nos dados originais. Isso é usado para alinhar DataFrames a um índice completo comum — por exemplo, garantindo que todos os meses de um ano apareçam, mesmo que não existam dados para alguns deles.

import pandas as pd

df = pd.DataFrame({
    'month': ['Jan', 'Mar', 'Jun'],
    'revenue': [100, 200, 300]
}).set_index('month')

all_months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun']
complete = df.reindex(all_months)
print(complete)
#       revenue
# Jan     100.0
# Feb       NaN   <- filled with NaN
# Mar     200.0
# Apr       NaN
# May       NaN
# Jun     300.0

reset_index e seleção de níveis em MultiIndex

Para um DataFrame com MultiIndex, reset_index() move todos os níveis de volta para as colunas por padrão. Passe level= para redefinir apenas níveis específicos. Isso é útil quando você quer manter um nível como índice (por exemplo, manter a data como índice) e mover apenas o outro nível para uma coluna.

import pandas as pd

df = pd.DataFrame(
    {'revenue': [100, 150, 200, 220]},
    index=pd.MultiIndex.from_tuples(
        [('East', 2023), ('East', 2024), ('West', 2023), ('West', 2024)],
        names=['region', 'year']
    )
)

# Reset only the 'year' level, keep 'region' as index
df2 = df.reset_index(level='year')
print(df2)
#         year  revenue
# region
# East    2023      100
# East    2024      150
# West    2023      200
# West    2024      220

Verificação rápida

Teste sua compreensão sobre como definir e redefinir o índice.

Recapitulação da lição

Nesta lição, você aprendeu que set_index('col') promove uma coluna ao índice de linhas para permitir acesso baseado em rótulos, passar uma lista cria um MultiIndex e reset_index() move o índice de volta para uma coluna (use drop=True para descartá-lo). Use reindex() para alinhar os dados a um índice de destino completo, preenchendo as posições ausentes com NaN. Essas técnicas são fundamentais para as próximas lições sobre GroupBy e combinação de dados.

Perguntas Frequentes

A aula “Definindo e redefinindo o índice” é grátis?

Sim — o texto completo de “Definindo e redefinindo o índice” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Pandas & NumPy Academy, atualize para CoddyKit PRO. O curso de Pandas & NumPy Academy inclui 4 aulas no total.

O que vou aprender em “Definindo e redefinindo o índice”?

Promova uma coluna a índice das linhas com set_index(), redefina-a com reset_index() e use uma visão geral de um MultiIndex. Você pratica Pandas & NumPy Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Pandas & NumPy Academy?

Nenhuma experiência prévia é necessária. Pandas & NumPy Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Definindo e redefinindo o índice”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Pandas & NumPy Academy?

Sim. Cada aula de Pandas & NumPy Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Ordenando por valores das colunas
  2. Ordenando pelo índice
  3. Classificando valores
  4. Definindo e redefinindo o índice
← Voltar para Pandas & NumPy Academy