J'ai un dataframe à deux colonnes et j'ai l'intention de le convertir en dictionnaire python - la première colonne sera la clé et la seconde sera la valeur. Merci d'avance.
Trame de données:
id value
0 0 10.2
1 1 5.7
2 2 7.4
python
dictionary
pandas
périgée
la source
la source
Réponses:
Consultez la documentation pour
to_dict
. Vous pouvez l'utiliser comme ceci:Et si vous n'avez qu'une seule colonne, pour éviter le nom de la colonne est également un niveau dans le dict (en fait, dans ce cas, vous utilisez le
Series.to_dict()
):la source
>>> ptest = p.DataFrame([['a',1],['a',2],['b',3]], columns=['id', 'value']) >>> ptest.set_index('id')['value'].to_dict()
la source
Si vous voulez un moyen simple de conserver les doublons, vous pouvez utiliser
groupby
:la source
Les réponses par joris dans ce fil et par punchagan dans le fil dupliqué sont très élégantes, cependant elles ne donneront pas de résultats corrects si la colonne utilisée pour les clés contient une valeur dupliquée.
Par exemple:
Si vous avez des entrées dupliquées et que vous ne voulez pas les perdre, vous pouvez utiliser ce code laid mais fonctionnel:
la source
mydict = defaultdict(list)\n for (key, val) in ptest[["id", "value"]].itertuples(index=False):\n mydict[key].append(val)
Solution la plus simple:
Exemple:
Si vous avez plusieurs valeurs, comme val1, val2, val3, etc. et que vous les voulez sous forme de listes, utilisez le code ci-dessous:
la source
records
dire ici?records
signifie ici‘records’ : list like [{column -> value}, … , {column -> value}]
Voir pandas.pydata.org/pandas-docs/stable/reference/api/…dans certaines versions, le code ci-dessous peut ne pas fonctionner
alors rendez-le explicite
Notez que j'ai utilisé id_ parce que le mot id est un mot réservé
la source
Vous pouvez utiliser 'dict comprehension'
la source
Une autre solution (légèrement plus courte) pour ne pas perdre les entrées en double:
la source
Vous avez besoin d'une liste comme valeur de dictionnaire. Ce code fera l'affaire.
la source
J'ai trouvé cette question en essayant de créer un dictionnaire à partir de trois colonnes d'un dataframe pandas. Dans mon cas, le dataframe a les colonnes A, B et C (disons que A et B sont les coordonnées géographiques de longitude et de latitude et C la région / état / etc du pays, ce qui est plus ou moins le cas).
Je voulais un dictionnaire avec chaque paire de valeurs A, B (clé de dictionnaire) correspondant à la valeur de C (valeur de dictionnaire) dans la ligne correspondante (chaque paire de valeurs A, B est garantie d'être unique en raison du filtrage précédent, mais c'est possible d'avoir la même valeur de C pour différentes paires de valeurs A, B dans ce contexte), alors j'ai fait:
L'utilisation de pandas to_dict () fonctionne également:
(aucune des colonnes A ou B n'a été utilisée comme index avant d'exécuter la ligne créant le dictionnaire)
Les deux approches sont rapides (moins d'une seconde sur une base de données de 85 000 lignes, un ordinateur portable double cœur rapide de 5 ans).
Les raisons pour lesquelles je poste ceci:
la source
c'est ma sloution, une boucle de base
la source
Voici ma solution:
la source