les colonnes de dataframe python pandas sont converties en clé et valeur dict


92

J'ai un cadre de données pandas avec plusieurs colonnes et je voudrais construire un dict à partir de deux colonnes: l'une comme les clés du dict et l'autre comme les valeurs du dict. Comment puis je faire ça?

Trame de données:

           area  count
co tp
DE Lake      10      7
Forest       20      5
FR Lake      30      2
Forest       40      3

Je dois définir la zone comme clé, compter comme valeur dans dict. Merci d'avance.

Réponses:


213

Si lakesc'est le vôtre DataFrame, vous pouvez faire quelque chose comme

area_dict = dict(zip(lakes.area, lakes.count))

1
Dans la version 0.17.1, obtenez l'erreur:TypeError: zip argument #2 must support iteration
jezrael

19
Solution:area_dict = dict(zip(lakes['area'], lakes['count']))
jezrael

1
Autres réponses à cette question stackoverflow.com/questions/18695605/…
Ben Fulton

1
Que faire si vous souhaitez que plusieurs colonnes soient les valeurs du dictionnaire? Je pense à quelque chose comme area_dict = dict(zip(lakes.area, (lakes.count, lakes.other_column))). Comment feriez-vous cela?
Jesse Marks

2
Si le deuxième argument a plusieurs valeurs, cela ne fonctionnera pas.
pnv

9

Avec les pandas, cela peut être fait comme:

Si les lacs est votre DataFrame:

area_dict = lakes.to_dict('records')

1
il n'y a pas de colonne «enregistrements» dans l'exemple donné. Dans ce cas également, l'index sera la clé, ce que nous ne voulons pas.
Michael D

11
@MichaelD 'records' n'est pas une colonne. C'est une option pour l'argument orient.
Zheng Liu

2

Vous pouvez également le faire si vous voulez jouer avec les pandas. Cependant, j'aime la manière de punchagan.

# replicating your dataframe
lake = pd.DataFrame({'co tp': ['DE Lake', 'Forest', 'FR Lake', 'Forest'], 
                 'area': [10, 20, 30, 40], 
                 'count': [7, 5, 2, 3]})
lake.set_index('co tp', inplace=True)

# to get key value using pandas
area_dict = lake.set_index('area').T.to_dict('records')[0]
print(area_dict)

output: {10: 7, 20: 5, 30: 2, 40: 3}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.