Partage
  • Partager sur Facebook
  • Partager sur Twitter

Transformer colonnes de dataframe en dictionnaire

Dictionnaire python

    10 janvier 2023 à 13:27:05

    Bonjour à tous,

    Novice en Python, j'ai un dataframe avec de multiples colonnes et notamment 2 colonnes que j'aimerai passer en dictionnaire.

    Mes 2 colonnes sont comme ceci :

    col_x     col_y

    a          ra

    a          rb

    a          rc

    b          ka

    b          kb

    Et j'aimerai créer ce dictionnaire :

    dico = {'a' : [ 'ra', 'rb', 'rc'], 'b' : ['ka', 'kb']}

    Je tourne en rond depuis un moment et je n'arrive jamais à avoir exactement ce que je veux. C'est le même problème que dans ce fil (https://openclassrooms.com/forum/sujet/concatener-les-valeurs-qui-ont-une-cle-identique) mais le code final n'est pas dispo :(

    Si quelqu'un pouvait m'aiguiller merci !

    • Partager sur Facebook
    • Partager sur Twitter
      10 janvier 2023 à 14:50:38

      Bonjour.

      ça correspond à une partie de la solution que j'ai proposé dans ce fil (https://openclassrooms.com/forum/sujet/pandas-dataframe-double-filtre) :

      import pandas
      
      
      # Tes données de départ
      data = {"col_x": ["a", "a", "a", "b", "b"], "col_y": ["ra", "rb", "rc", "ka", "kb"]}
      df = pandas.DataFrame(data)
      
      print(df, "\n")
      
      
      # Création d'une liste contenant les tuples
      liste = [(val_x, df["col_y"][i]) for i, val_x in enumerate(df["col_x"])]
      
      print(liste, "\n")
      
      
      # Création d'un dictionnaire contenant juste les clés
      dico = {k: [] for k in df["col_x"]}
      
      print(dico, "\n")
      
      
      # Attribution des valeurs aux clés du dictionnaire
      for elem in liste:
          dico[elem[0]].append(elem[1])
      
      print(dico, "\n")
      

       Cela donne en sortie :

        col_x col_y
      0     a    ra
      1     a    rb
      2     a    rc
      3     b    ka
      4     b    kb 
      
      
      [('a', 'ra'), ('a', 'rb'), ('a', 'rc'), ('b', 'ka'), ('b', 'kb')] 
      
      
      {'a': [], 'b': []} 
      
      
      {'a': ['ra', 'rb', 'rc'], 'b': ['ka', 'kb']}

      -
      Edité par PB68 10 janvier 2023 à 18:10:00

      • Partager sur Facebook
      • Partager sur Twitter

      PB68

        10 janvier 2023 à 14:54:56

        il y a la méthode pandas Dataframe.to_dict sinon https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_dict.html 

        PS: j'ai peut-être répondu un peu trop vite, mais à regarder au cas où

        -
        Edité par umfred 10 janvier 2023 à 14:55:41

        • Partager sur Facebook
        • Partager sur Twitter
          10 janvier 2023 à 17:21:44

          Merci !!! La réponse de PB68 fonctionne bien :)

          (même si je ne comprends pas bien la ligne 12 : liste = ...)

          • Partager sur Facebook
          • Partager sur Twitter
            10 janvier 2023 à 18:27:49

            FlorentValat1 a écrit:

            Merci !!! La réponse de PB68 fonctionne bien :)

            (même si je ne comprends pas bien la ligne 12 : liste = ...)

            liste = [(val_x, df["col_y"][i]) for i, val_x in enumerate(df["col_x"])]

            C'est une "list comprehension", c'est-à-dire que je créée la liste "liste" à la volée.

            • "enumerate(df["col_x"])" : permet d'itérer le contenu de la colonne "col_x" (val_x) tout en générant un indice (i).
            • "(val_x, df["col_y"][i])" : définition du tuple qui est ajouté à la liste, il est composé de la valeur de la colonne "col_x" auquel est associé au contenu de la colonne "col_y" correspondant grâce à l'indice i.
            • Partager sur Facebook
            • Partager sur Twitter

            PB68

              12 janvier 2023 à 10:11:23

              Merci pour ces éclairages :) !!!
              • Partager sur Facebook
              • Partager sur Twitter
                12 janvier 2023 à 10:21:10

                FlorentValat1 a écrit:

                Merci !!! La réponse de PB68 fonctionne bien :)

                Merci pour ces éclairages :) !!!

                Bonjour,

                Sujet résolu

                Tu peux passer le sujet à "résolu" (bouton en haut à droite du sujet) et cliquer sur les pouces levés des messages qui t'ont aidé⋅e ;)



                • Partager sur Facebook
                • Partager sur Twitter

                Transformer colonnes de dataframe en 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