HOWTO · Pandas
Como converter o índice de um Pandas Dataframe em uma coluna
Aprenda a adicionar os valores do índice de um DataFrame do pandas como coluna com df.index ou reset_index, nomear essa coluna com rename_axis e converter níveis de MultiIndex em colunas.
Nesta página
Para adicionar os valores do índice de um DataFrame como colunas comuns, use reset_index(). O método retorna um novo DataFrame com o índice anterior em uma ou mais colunas e um índice inteiro padrão. Para copiar o índice para uma coluna e mantê-lo também como índice, atribua df.index a uma coluna. Use rename_axis() antes de redefinir o índice quando quiser escolher o nome da coluna resultante. A mesma operação reset_index() transforma cada nível de um MultiIndex em uma coluna.
Adicionar o índice como coluna com df.index
Atribuir df.index copia os valores do índice para uma coluna e mantém o índice do DataFrame. Isso é útil quando você precisa do índice tanto como rótulo das linhas quanto como dado. Neste exemplo, a nova coluna se chama index; escolha outro nome se ele descrever melhor seus dados. Execute este exemplo. Os rótulos e textos de saída exibidos permanecem em inglês:
import pandas as pd
df = pd.DataFrame({"name": ["Ada", "Lin"], "score": [8, 9]}, index=[101, 102])
df["index"] = df.index
print(df.to_dict(orient="records"))
print("row labels:", df.index.tolist())
[{'name': 'Ada', 'score': 8, 'index': 101}, {'name': 'Lin', 'score': 9, 'index': 102}]
row labels: [101, 102]
Os registros mostram os valores copiados, enquanto a segunda linha confirma que os rótulos originais das linhas continuam presentes. Essa atribuição não cria um novo índice padrão. Se já existir uma coluna com o nome escolhido, selecione outro nome para evitar substituir esses dados.
Adicionar o índice como coluna com reset_index
Chame reset_index() para mover os valores do índice para as colunas do DataFrame retornado. Se o índice tiver um nome, esse nome será usado na coluna. Se não tiver nome, o pandas usa index quando esse nome está disponível. A operação não altera o DataFrame original, a menos que você atribua o resultado de volta a ele; armazená-lo em uma variável deixa explícita a nova estrutura. Execute este exemplo. Os rótulos e textos de saída exibidos permanecem em inglês:
import pandas as pd
df = pd.DataFrame({"score": [8, 9]}, index=pd.Index([101, 102], name="record_id"))
converted = df.reset_index()
print(converted.to_dict(orient="records"))
print("columns:", converted.columns.tolist())
[{'record_id': 101, 'score': 8}, {'record_id': 102, 'score': 9}]
columns: ['record_id', 'score']
Por padrão, o resultado recebe um novo índice inteiro que começa em zero. Use reset_index(drop=True) quando quiser redefinir o índice sem manter o índice anterior como coluna. Se o nome gerado para a coluna do índice entrar em conflito com uma coluna existente, renomeie uma delas antes de redefinir o índice.
Nomear a coluna do índice com rename_axis
rename_axis() define o nome do índice, e reset_index() usa esse nome na nova coluna. Isso também funciona quando o índice de origem não tem nome. A sequência retorna um DataFrame, não uma Series, e por isso mantém as outras colunas e os valores de suas linhas. Execute este exemplo. Os rótulos e textos de saída exibidos permanecem em inglês:
import pandas as pd
df = pd.DataFrame({"city": ["Oslo", "Lima"], "visitors": [12, 7]}, index=[1, 2])
converted = df.rename_axis("site_id").reset_index()
print(converted.to_dict(orient="records"))
[{'site_id': 1, 'city': 'Oslo', 'visitors': 12}, {'site_id': 2, 'city': 'Lima', 'visitors': 7}]
Você também pode definir um nome ao criar um índice, mas rename_axis() é útil quando o DataFrame já existe ou quando você quer que as etapas da conversão apareçam juntas. Para consultar os parâmetros e o comportamento de retorno de reset_index(), veja a referência de DataFrame.reset_index.
Converter um MultiIndex em colunas
Um MultiIndex armazena um rótulo de linha em mais de um nível. Chamar reset_index() move cada nível para sua própria coluna, preservando as combinações e os valores associados. Isso é útil antes de exportar ou combinar dados que esperam colunas comuns. O exemplo determinístico a seguir converte os dois níveis nomeados. Os rótulos e textos de saída exibidos permanecem em inglês:
import pandas as pd
index = pd.MultiIndex.from_tuples(
[("North", "A"), ("North", "B"), ("South", "A")],
names=["region", "code"],
)
df = pd.DataFrame({"sales": [5, 8, 3]}, index=index)
converted = df.reset_index()
print(converted.to_dict(orient="records"))
[{'region': 'North', 'code': 'A', 'sales': 5}, {'region': 'North', 'code': 'B', 'sales': 8}, {'region': 'South', 'code': 'A', 'sales': 3}]
Cada nível anterior do índice agora é uma coluna separada, e sales continua associado à região e ao código originais. Se, em vez disso, você precisar mover uma coluna comum para o índice, set_index() realiza essa transformação inversa; ela segue a direção oposta às conversões mostradas aqui.