Convertire Dataframe Pandas in dizionario

Manav Narula 23 gennaio 2022
  1. Pandas DataFrame al dizionario utilizzando la funzione to_dict()
  2. Pandas DataFrame al dizionario con valori come lista o Series
  3. Pandas DataFrame all’lista dei dizionari
  4. Pandas Dataframe al dizionario per righe
  5. Dataframe al dizionario con una colonna come key
  6. Pandas DataFrame al dizionario usando le funzioni dict() e zip()
Convertire Dataframe Pandas in dizionario

Questo tutorial introdurrà come convertire un Pandas DataFrame in un dizionario con gli elementi della colonna indice come chiave e gli elementi corrispondenti in altre colonne come valore. Useremo il seguente DataFrame nell’articolo.

import pandas as pd

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

print(df)

Produzione:

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

Pandas DataFrame al dizionario utilizzando la funzione to_dict()

La funzione Pandas to_dict() converte un DataFrame in un dizionario. I parametri determinano il formato del dizionario e il modo in cui vengono associate le coppie chiave-valore. Di seguito è mostrato un esempio elementare di conversione di un DataFrame in Dictionary utilizzando 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)

Produzione:

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

Come puoi vedere nell’output, i nomi delle colonne vengono convertiti in chiavi e ogni record come valore, con index come chiave.

Pandas DataFrame al dizionario con valori come lista o Series

Possiamo passare parametri come list, records, series, index, split e dict alla funzione to_dict() per modificare il formato del dizionario finale. Ad esempio, quando passiamo lista e series come parametro, abbiamo i nomi delle colonne come chiavi, ma le coppie di valori vengono convertite rispettivamente in una lista e in una serie di righe. Il seguente esempio lo dimostrerà.

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)

Produzione:

{'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 all’lista dei dizionari

Possiamo anche fare in modo che ogni riga come dizionario separato passi records alla funzione. Il risultato finale è una lista con ogni riga come un dizionario. Per esempio,

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)

Produzione:

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

Pandas Dataframe al dizionario per righe

Ma per molti casi, potremmo non volere i nomi delle colonne come chiavi del dizionario. Per tali situazioni, possiamo passare index per rendere l’indice DataFrame come chiavi. Il seguente frammento di codice lo mostrerà.

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)

Produzione:

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

Dataframe al dizionario con una colonna come key

Ma cosa succede se preferiamo utilizzare gli elementi di una colonna come chiavi e gli elementi di altre colonne come valori? È possibile semplicemente impostando la colonna richiesta come indice del DataFrame e assumendone la trasposizione utilizzando la funzione .T().

Esempio:

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)

Produzione:

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

Pandas DataFrame al dizionario usando le funzioni dict() e zip()

La funzione Python dict() può anche convertire il Pandas DataFrame in un dizionario. Dovremmo anche usare la funzione zip() con le singole colonne come argomenti per creare l’iteratore parallelo. Quindi la funzione zip() restituirà tutti i valori in una riga in ogni iterazione.

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)

Produzione:

{'Jay': [16, 'BBA'], 'Jack': [19, 'BTech'], 'Mark': [18, 'BSc']}
Autore: Manav Narula
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

Articolo correlato - Pandas DataFrame