Panda: crea un dataframe da un dict con lunghezze diverse


È possibile utilizzare la seguente sintassi di base per creare un DataFrame panda da un dizionario le cui voci hanno lunghezze diverse:

 import pandas as pd

df = pd. DataFrame (dict([(key, pd. Series (value)) for key, value in some_dict. items ()]))

Questa sintassi converte un elenco di array di dizionari in un elenco di serie panda.

Ciò ci consente di creare un DataFrame panda e di inserire semplicemente i valori NaN per garantire che ciascuna colonna nel DataFrame risultante abbia la stessa lunghezza.

L’esempio seguente mostra come utilizzare questa sintassi nella pratica.

Esempio: crea un Pandas DataFrame da un dict con lunghezze diverse

Supponiamo di avere il seguente dizionario contenente voci di diversa lunghezza:

 #create dictionary whose entries have different lengths
some_dict = dict(A=[2, 5, 5, 7, 8], B=[9, 3], C=[4, 4, 2])

#view dictionary
print (some_dict)

{'A': [2, 5, 5, 7, 8], 'B': [9, 3], 'C': [4, 4, 2]}

Se proviamo a utilizzare la funzione from_dict() per convertire questo dizionario in un DataFrame panda, riceveremo un errore:

 import pandas as pd

#attempt to create pandas DataFrame from dictionary
df = pd. DataFrame . from_dict (some_dict)

ValueError : All arrays must be of the same length

Riceviamo un errore che ci informa che tutti gli array nel dizionario devono avere la stessa lunghezza.

Per aggirare questo errore, possiamo utilizzare la seguente sintassi per convertire il dizionario in DataFrame:

 import pandas as pd

#create pandas DataFrame from dictionary
df = pd. DataFrame (dict([(key, pd. Series (value)) for key, value in some_dict. items ()]))

#view DataFrame
print (df)

   ABC
0 2 9.0 4.0
1 5 3.0 4.0
2 5 NaN 2.0
3 7 NaN NaN
4 8 NaN NaN

Tieni presente che siamo in grado di creare con successo un DataFrame panda e che i valori NaN vengono riempiti per garantire che ogni colonna abbia la stessa lunghezza.

Se vuoi sostituire questi valori NaN con altri valori (come zero), puoi utilizzare la funzione replace() come segue:

 #replace all NaNs with zeros
df. replace (np. nan , 0, inplace= True )

#view updated DataFrame
print (df)

   ABC
0 2 9.0 4.0
1 5 3.0 4.0
2 5 0.0 2.0
3 7 0.0 0.0
4 8 0.0 0.0

Si noti che ciascun valore NaN è stato sostituito con zero.

Sentiti libero di utilizzare la funzione replace() per sostituire i valori NaN con qualunque valore desideri.

Risorse addizionali

I seguenti tutorial spiegano come eseguire altre operazioni comuni nei panda:

Panda: come convertire un DataFrame in un dizionario
Panda: come rinominare le colonne con un dizionario
Panda: come compilare i valori NaN utilizzando un dizionario

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *