179 votes

Comment convertir un dataframe en dictionnaire ?

J'ai un dataframe avec deux colonnes et j'ai l'intention de le convertir en dictionnaire. La première colonne sera la clé et la seconde sera la valeur.

Cadre de données :

    id    value
0    0     10.2
1    1      5.7
2    2      7.4

Comment puis-je le faire ?

377voto

punchagan Points 1103

Si lakes est votre DataFrame vous pouvez faire quelque chose comme

area_dict = dict(zip(lakes.id, lakes.value))

209voto

joris Points 10700

Voir les documents relatifs à to_dict . Vous pouvez l'utiliser comme ceci :

df.set_index('id').to_dict()

Et si vous n'avez qu'une seule colonne, pour éviter que le nom de la colonne ne soit aussi un niveau dans le dict (en fait, dans ce cas, vous utilisez la balise Series.to_dict() ) :

df.set_index('id')['value'].to_dict()

92voto

praful gupta Points 1001
mydict = dict(zip(df.id, df.value))

66voto

DSM Points 71975

Si vous voulez un moyen simple de préserver les doublons, vous pouvez utiliser groupby :

>>> ptest = pd.DataFrame([['a',1],['a',2],['b',3]], columns=['id', 'value']) 
>>> ptest
  id  value
0  a      1
1  a      2
2  b      3
>>> {k: g["value"].tolist() for k,g in ptest.groupby("id")}
{'a': [1, 2], 'b': [3]}

33voto

dalloliogm Points 2628

Les réponses de joris dans ce fil de discussion et de punchagan dans le fil dupliqué sont très élégants, mais ils ne donneront pas de résultats corrects si la colonne utilisée pour les clés contient une valeur dupliquée.

Par exemple :

>>> ptest = p.DataFrame([['a',1],['a',2],['b',3]], columns=['id', 'value']) 
>>> ptest
  id  value
0  a      1
1  a      2
2  b      3

# note that in both cases the association a->1 is lost:
>>> ptest.set_index('id')['value'].to_dict()
{'a': 2, 'b': 3}
>>> dict(zip(ptest.id, ptest.value))
{'a': 2, 'b': 3}

Si vous avez des entrées dupliquées et que vous ne voulez pas les perdre, vous pouvez utiliser ce code laid mais fonctionnel :

>>> mydict = {}
>>> for x in range(len(ptest)):
...     currentid = ptest.iloc[x,0]
...     currentvalue = ptest.iloc[x,1]
...     mydict.setdefault(currentid, [])
...     mydict[currentid].append(currentvalue)
>>> mydict
{'a': [1, 2], 'b': [3]}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X