Convertir Pandas DataFrame en un diccionario

Manav Narula 30 enero 2023
  1. Pandas DataFrame a un diccionario usando la función to_dict()
  2. Pandas DataFrame a Diccionario con valores como lista o Series
  3. Pandas DataFrame a la lista de diccionarios
  4. Pandas Dataframe al Diccionario por Filas
  5. Dataframe al diccionario con una columna como key
  6. Pandas DataFrame al diccionario usando las funciones dict() y zip()
Convertir Pandas DataFrame en un diccionario

Este tutorial introducirá cómo convertir un Pandas DataFrame a un diccionario con los elementos de la columna del índice como clave y los elementos correspondientes en otras columnas como valor. En el artículo utilizaremos el siguiente DataFrame.

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 a un diccionario usando la función to_dict()

La función Pandas to_dict() convierte un DataFrame en un diccionario. Los parámetros determinan el formato del diccionario y cómo se asocian los pares clave-valor. A continuación se muestra un ejemplo elemental de la conversión de un DataFrame a un diccionario usando to_dict():

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 puede ver en la salida, los nombres de las columnas se convierten en claves y cada registro como valor, con el índice como su clave.

Pandas DataFrame a Diccionario con valores como lista o Series

Podemos pasar parámetros como list, records, series, index, split, y dict a la función to_dict() para alterar el formato del diccionario final. Por ejemplo, cuando pasamos list y series como parámetro, tenemos los nombres de las columnas como claves, pero los pares de valores se convierten en una lista y una serie de filas, respectivamente. El siguiente ejemplo lo demostrará.

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 a la lista de diccionarios

También podemos hacer que cada fila como un diccionario separado pase records a la función. El resultado final es una lista con cada fila como un diccionario. Por ejemplo,

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 al Diccionario por Filas

Pero en muchos casos, puede que no queramos los nombres de las columnas como claves del diccionario. Para tales situaciones, podemos pasar index para hacer el índice del DataFrame como claves. El siguiente fragmento de código lo mostrará.

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 al diccionario con una columna como key

¿Pero qué pasa si preferimos usar los elementos de una columna como las claves y los elementos de otras columnas como los valores? Es posible simplemente haciendo la columna requerida como índice del DataFrame y tomando su transposición usando la función .T().

Ejemplo:

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 al diccionario usando las funciones dict() y zip()

La función dict() de Python también puede convertir Pandas DataFrame en un diccionario. También deberíamos usar la función zip() con las columnas individuales como argumentos para crear el iterador paralelo. Entonces la función zip() dará todos los valores en una fila en cada iteración.

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

Artículo relacionado - Pandas DataFrame