Converter Pandas Dataframe em Dicionário

Manav Narula 30 janeiro 2023
  1. Pandas DataFrame para dicionário usando a função to_dict()
  2. Pandas DataFrame para dicionário com valores como lista ou Series
  3. Pandas DataFrame para lista de dicionários
  4. Pandas Dataframe a Dicionário por Linhas
  5. DataFrame para Dicionário com uma Coluna como chave
  6. Pandas DataFrame para dicionário usando as funções dict() e zip()
Converter Pandas Dataframe em Dicionário

Este tutorial irá introduzir como converter uma Pandas DataFrame para um dicionário com os elementos da coluna de índice como chave e os elementos correspondentes em outras colunas como o valor. Utilizaremos a seguinte DataFrame no artigo.

import pandas as pd

df = pd.DataFrame(
    [["Jay", 16, "BBA"], ["Jack", 19, "BTech"], ["Mark", 18, "BSc"]],
    columns=["Name", "Age", "Course"],
)

print(df)

Resultado:

   Name  Age Course
0   Jay   16    BBA
1  Jack   19  BTech
2  Mark   18    BSc

Pandas DataFrame para dicionário usando a função to_dict()

Pandas to_dict() a função converte um DataFrame para um dicionário. Os parâmetros determinam o formato do dicionário e como os pares de valores-chave estão associados. Um exemplo elementar de conversão de uma DataFrame para Dicionário utilizando to_dict() é mostrado abaixo:

import pandas as pd

df = pd.DataFrame(
    [["Jay", 16, "BBA"], ["Jack", 19, "BTech"], ["Mark", 18, "BSc"]],
    columns=["Name", "Age", "Course"],
)

d1 = df.to_dict()
print(d1)

Resultado:

{'Name': {0: 'Jay', 1: 'Jack', 2: 'Mark'}, 'Age': {0: 16, 1: 19, 2: 18}, 'Course': {0: 'BBA', 1: 'BTech', 2: 'BSc'}}

Como se pode ver na saída, os nomes das colunas são convertidos em chaves e cada registo como o valor, com índice como a sua chave.

Pandas DataFrame para dicionário com valores como lista ou Series

Podemos passar parâmetros como list, records, series, index, split, e dict a to_dict()função para alterar o formato do dicionário final. Por exemplo, quando passamos list e series como parâmetro, temos os nomes das colunas como chaves, mas os pares de valores são convertidos numa lista e numa série de linhas, respectivamente. O exemplo seguinte irá demonstrar isto.

import pandas as pd

df = pd.DataFrame(
    [["Jay", 16, "BBA"], ["Jack", 19, "BTech"], ["Mark", 18, "BSc"]],
    columns=["Name", "Age", "Course"],
)

d_list = df.to_dict("list")
print(d_list)

d_series = df.to_dict("series")
print(d_series)

Resultado:

{'Name': ['Jay', 'Jack', 'Mark'], 'Age': [16, 19, 18], 'Course': ['BBA', 'BTech', 'BSc']}

{'Name': 0     Jay
1    Jack
2    Mark
Name: Name, dtype: object, 'Age': 0    16
1    19
2    18
Name: Age, dtype: int64, 'Course': 0      BBA
1    BTech
2      BSc
Name: Course, dtype: object}

Pandas DataFrame para lista de dicionários

Também podemos ter cada fila como um dicionário separado a passar records à função. O resultado final é uma lista com cada fila como um dicionário. Por exemplo,

import pandas as pd

df = pd.DataFrame(
    [["Jay", 16, "BBA"], ["Jack", 19, "BTech"], ["Mark", 18, "BSc"]],
    columns=["Name", "Age", "Course"],
)

d_records = df.to_dict("records")
print(d_records)

Resultado:

[{'Name': 'Jay', 'Age': 16, 'Course': 'BBA'}, {'Name': 'Jack', 'Age': 19, 'Course': 'BTech'}, {'Name': 'Mark', 'Age': 18, 'Course': 'BSc'}]

Pandas Dataframe a Dicionário por Linhas

Mas para muitos casos, podemos não querer os nomes das colunas como as chaves do dicionário. Para tais situações, podemos passar index para fazer o índice DataFrame como chaves. O seguinte trecho de código irá mostrá-lo.

import pandas as pd

df = pd.DataFrame(
    [["Jay", 16, "BBA"], ["Jack", 19, "BTech"], ["Mark", 18, "BSc"]],
    columns=["Name", "Age", "Course"],
)

d_index = df.to_dict("index")
print(d_index)

Resultado:

{0: {'Name': 'Jay', 'Age': 16, 'Course': 'BBA'}, 1: {'Name': 'Jack', 'Age': 19, 'Course': 'BTech'}, 2: {'Name': 'Mark', 'Age': 18, 'Course': 'BSc'}}

DataFrame para Dicionário com uma Coluna como chave

Mas e se preferirmos utilizar os elementos de uma coluna como as chaves e os elementos de outras colunas como os valores? É possível, bastando fazer a coluna necessária como índice da DataFrame e tomar a sua transposição utilizando a função .T().

Exemplo:

import pandas as pd

df = pd.DataFrame(
    [["Jay", 16, "BBA"], ["Jack", 19, "BTech"], ["Mark", 18, "BSc"]],
    columns=["Name", "Age", "Course"],
)

d_names = df.set_index("Name").T.to_dict("list")
print(d_names)

Resultado:

{'Jay': [16, 'BBA'], 'Jack': [19, 'BTech'], 'Mark': [18, 'BSc']}

Pandas DataFrame para dicionário usando as funções dict() e zip()

A função Python dict() também pode converter a Pandas DataFrame num dicionário. Devemos também utilizar a função zip() com as colunas individuais como argumentos para criar o iterador paralelo. Depois, a função zip() produzirá todos os valores numa linha em cada iteração.

import pandas as pd

df = pd.DataFrame(
    [["Jay", 16, "BBA"], ["Jack", 19, "BTech"], ["Mark", 18, "BSc"]],
    columns=["Name", "Age", "Course"],
)

d = dict([(i, [a, b]) for i, a, b in zip(df["Name"], df["Age"], df["Course"])])
print(d)

Resultado:

{'Jay': [16, 'BBA'], 'Jack': [19, 'BTech'], 'Mark': [18, 'BSc']}
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

Artigo relacionado - Pandas DataFrame