HOWTO · Pandas

Converter Pandas Dataframe em Dicionário

Este tutorial demonstra como converter uma Pandas DataFrame para um 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']}