Converter Pandas Dataframe em Dicionário

  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()

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']}

Artigo relacionado - Pandas DataFrame

  • Converter a coluna Pandas DataFrame em lista
  • Como definir valor para uma célula específica em Pandas DataFrame usando índice