Partage
  • Partager sur Facebook
  • Partager sur Twitter

créer un dictionnaire

Sujet résolu
    19 janvier 2021 à 16:03:29

    Bonjour, 

    Je voudrai créer un dictionnaire a partir de deux colonnes (je veux qu'une colonne soit la clé et l'autre soit la valeur) d'un fichier csv que j'ai lu et filtré avec pandas:

    quand je fais 

    (key, value)=df["colonne1"], df["colonne2"]

    Dico[key]=value

    ça me retourne une erreur sous forme : 'series' objects are mutable, thus they cannot be hashed

    avez-vous une idée pour faire ce dico ? 

    • Partager sur Facebook
    • Partager sur Twitter
      19 janvier 2021 à 16:37:45

      Bonjour,

      Essaie key,value = df["colonne1"], df["colonne2"] pour voir ...

      • Partager sur Facebook
      • Partager sur Twitter
        19 janvier 2021 à 17:13:45

        ZakSBen a écrit:

        ça me retourne une erreur sous forme : 'series' objects are mutable, thus they cannot be hashed

        Si mes souvenirs sont bons c'est un problème avec la variable key, la clé d'un dictionnaire ne peut pas être un type mutable comme indiqué dans le message d'erreur, donc pas de liste par exemple.
        • Partager sur Facebook
        • Partager sur Twitter

        Blond, bouclé, toujours le sourire aux lèvres...

          19 janvier 2021 à 17:27:37

          ZakSBen a écrit:

          avez-vous une idée pour faire ce dico ? 


          Si la colonne 1 est 1, 2, 3 et la colonne 2 a, b, c, quel sera l'intérêt d'un dico contenant une clef (1, 2, 3) associée à la valeur (a, b, c)? Y'aura-t-il d'autres clefs? Ne cherchez vous pas à faire un dico ou la clef 1 serait associé à a, la clef 2 a b, ...

          Sinon le message d'erreur dit juste que la clef d'un dico ne peut pas être mutable (comme par exemple une liste) mais un non mutable (un tuple, par exemple).

          • Partager sur Facebook
          • Partager sur Twitter
            19 janvier 2021 à 17:39:33

            Tu as essayé 

             key,value = df["colonne1"], df["colonne2"] 


            ou pas ?

            • Partager sur Facebook
            • Partager sur Twitter
              19 janvier 2021 à 19:20:57

              Phil_1857 a écrit:

              Tu as essayé 

               key,value = df["colonne1"], df["colonne2"] 

              vous pourriez essayer vous même et constater qu'écrire key,value = ou (key,value) =... c'est juste la même chose.

              • Partager sur Facebook
              • Partager sur Twitter
                19 janvier 2021 à 19:25:36

                non j'ai pas encore essayé key,value = df["colonne1"], df["colonne2"] 

                c'est vrai que la colonne 1 est une variation donc un chiffre et la colonne 2 le type de cette variation donc une chaine de caractère vous voulez dire que je dois inverser de tel manière la clef soit colonne 2 er la valeur pour la variation ? 

                • Partager sur Facebook
                • Partager sur Twitter
                  19 janvier 2021 à 19:55:02

                  ZakSBen a écrit:

                  c'est vrai que la colonne 1 est une variation donc un chiffre

                  Une variation ?

                  Un type int, c'est pas mutable, donc ça devrait fonctionner. Vu le message d'erreur tu as un autre type.

                  Affiche le contenu de df["colonne1"] pour voir ce que c'est. Tu peux utiliser type(var) pour voir le type d'une variable si besoin.

                  -
                  Edité par LoupSolitaire 19 janvier 2021 à 19:56:11

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Blond, bouclé, toujours le sourire aux lèvres...

                    19 janvier 2021 à 20:33:57

                    @LoupeSoulitaire

                    La colonne 1 : des fréquences donc type int 

                    • Partager sur Facebook
                    • Partager sur Twitter
                      19 janvier 2021 à 22:12:34

                      Le message d'erreur dit que c'est un type 'series'.

                      C'est peut-être une serie qui contient des int, mais c'est pas un int.

                      Tu peux contourner le problème en mettant tes 'series' dans une liste, et utiliser l'index de la liste comme clé du dictionnaire.

                      -
                      Edité par LoupSolitaire 19 janvier 2021 à 22:13:52

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Blond, bouclé, toujours le sourire aux lèvres...

                        20 janvier 2021 à 2:36:55

                        Quand on ne sait pas le type ou la valeur de l'objet, on les affiche: print(objet) ou print(type(objet))
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Le Tout est souvent plus grand que la somme de ses parties.

                        Anonyme
                          20 janvier 2021 à 10:34:36

                          LoupSolitaire a écrit:

                          Le message d'erreur dit que c'est un type 'series'.

                          C'est peut-être une serie qui contient des int, mais c'est pas un int.

                          Tu peux contourner le problème en mettant tes 'series' dans une liste, et utiliser l'index de la liste comme clé du dictionnaire.

                          -
                          Edité par LoupSolitaire il y a environ 11 heures


                          Exact c'est un objet pandas series


                          @ ZakSBen, tu peux faire :

                          for key, value in zip(df["colonne1"], df["colonne2"]):
                              Dico[key] = value



                          • Partager sur Facebook
                          • Partager sur Twitter
                            20 janvier 2021 à 10:56:22

                            Diablo76 a écrit:

                            LoupSolitaire a écrit:

                            Le message d'erreur dit que c'est un type 'series'.

                            C'est peut-être une serie qui contient des int, mais c'est pas un int.

                            Tu peux contourner le problème en mettant tes 'series' dans une liste, et utiliser l'index de la liste comme clé du dictionnaire.

                            -
                            Edité par LoupSolitaire il y a environ 11 heures


                            Exact c'est un objet pandas series

                            @LoupSolitaire, exact ça marche avec zip merci à vous tous 


                            @ ZakSBen, tu peux faire :

                            for key, value in zip(df["colonne1"], df["colonne2"]):
                                Dico[key] = value






                            -
                            Edité par ZakAad 20 janvier 2021 à 10:57:17

                            • Partager sur Facebook
                            • Partager sur Twitter

                            créer un dictionnaire

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                            • Editeur
                            • Markdown