IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Filtrer valeurs Dataframe


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    -
    Inscrit en
    Novembre 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Suisse

    Informations professionnelles :
    Activité : -

    Informations forums :
    Inscription : Novembre 2020
    Messages : 4
    Par défaut Filtrer valeurs Dataframe
    Bonjour,

    Je souhaite ajouter plusieurs lignes à un DataFrame en choisissant les lignes spécifiques à ajouter. Voici le code que j'utilise:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    def hint_mapping(dict_): 
        for k, v in dict_.items():
            wanted = "on the way"
            return {j for i, j in v.items() if wanted in j}
     
    hints_dataframe=hints_dataframe.append({'Hints': hint_mapping(json_data['gossip_stones'])},ignore_index=True)
    Grâce à la fonction hint_mapping, je souhaiterais seulement garder les lignes qui contiennent "on the way". Cependant j'obtient un résultat bizarre. J'obtient certaines lignes de mon DataFrame vides (avec juste set() ) et mon DataFrame s'arrête à 10'000 lignes, 10'000 étant le nombre de fichiers json et donc de dictionnaire "gossip_stones" sur lesquels j'effectue ma fonction. Or, pour chaque dictionnaire "gossip_stones", il y a plusieurs éléments avec le string "on the way", je devrais donc avoir plusieurs lignes pour chaque dictionnaire "gossip_stones", et donc plus de 10'000 lignes (et pas de lignes vides non plus). Comment ça se fait?


    Voici à quoi ressemble le dictionnaire gossip_stones. C'est en fait un dictionnaire qui contient plusieurs dictionnaires.

    "gossip_stones": {
    "Colossus (Spirit Temple)": {"text": "They say that the #Skull Mask# yields #Ruto's Letter#.", "colors": ["Green", "Red"]},
    "DMC (Bombable Wall)": {"text": "They say that #Deku Tree# is on the way of the hero.", "colors": ["Light Blue"]},
    "DMC (Upper Grotto)": {"text": "They say that Zelda is a poor leader."},
    "DMT (Biggoron)": {"text": "They say that the final reward from the #Frogs of Zora's River# is #a Piece of Heart#.", "colors": ["Green", "Red"]},
    "DMT (Storms Grotto)": {"text": "They say that Lon Lon Ranch prospered under Ingo."},
    "Dodongos Cavern (Bombable Wall)": {"text": "They say that #Kakariko Village# is on the way of the hero.", "colors": ["Light Blue"]},
    "GC (Maze)": {"text": "They say that #Sacred Forest Meadow# is on the way of the hero.", "colors": ["Light Blue"]},
    "GC (Medigoron)": {"text": "They say that #Ganon's Castle# is on the way of the hero.", "colors": ["Light Blue"]},
    "GV (Waterfall)": {"text": "They say that a hero ventures #beyond the wasteland# to learn #Epona's Song#.", "colors": ["Green", "Red"]},
    "Graveyard (Shadow Temple)": {"text": "They say that #Ganon's Castle# is on the way of the hero.", "colors": ["Light Blue"]},
    "HC (Malon)": {"text": "They say that the #Flare Dancer atop the Fire Temple# guards a chest containing #a Blue Rupee#.", "colors": ["Green", "Red"]},
    "HC (Rock Wall)": {"text": "They say that slaying #30 Gold Skulltulas# reveals #Bombchus (10 pieces)#.", "colors": ["Green", "Red"]},
    "HC (Storms Grotto)": {"text": "Save your future, end the Happy Mask Salesman."},
    "HF (Cow Grotto)": {"text": "They say that you're wasting time reading this hint, but I disagree. Talk to me again!"},
    "HF (Near Market Grotto)": {"text": "You're playing a Randomizer. I'm randomized!^Here's a random number: #4#.&Enjoy your Randomizer!"},
    "HF (Open Grotto)": {"text": "I'm stoned. Get it?"},
    "HF (Southeast Grotto)": {"text": "Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep.^Mweep."},
    "KF (Deku Tree Left)": {"text": "They say that the #Skull Mask# yields #Ruto's Letter#.", "colors": ["Green", "Red"]},
    "KF (Deku Tree Right)": {"text": "They say that slaying #50 Gold Skulltulas# reveals #Arrows (30 pieces)#.", "colors": ["Green", "Red"]},
    "KF (Outside Storms)": {"text": "They say that #Sacred Forest Meadow# is on the way of the hero.", "colors": ["Light Blue"]},
    "KF (Storms Grotto)": {"text": "Open your eyes.^Open your eyes.^Wake up, @."},
    "Kak (Open Grotto)": {"text": "You're comparing yourself to me?^Ha! You're not even good enough to be my fake."},
    "LH (Lab)": {"text": "They say that slaying #40 Gold Skulltulas# reveals #a Blue Rupee#.", "colors": ["Green", "Red"]},
    "LH (Southeast Corner)": {"text": "They say that #flames in the Composers' Grave# reveal #a Recovery Heart#.", "colors": ["Green", "Red"]},
    "LH (Southwest Corner)": {"text": "They say that #Biggoron# crafts #a Recovery Heart#.", "colors": ["Green", "Red"]},
    "LW (Bridge)": {"text": "They say that slaying #40 Gold Skulltulas# reveals #a Blue Rupee#.", "colors": ["Green", "Red"]},
    "LW (Near Shortcuts Grotto)": {"text": "They say Ganondorf's bolts can be reflected with glass or steel."},
    "SFM (Maze Lower)": {"text": "They say that the final reward from the #Frogs of Zora's River# is #a Piece of Heart#.", "colors": ["Green", "Red"]},
    "SFM (Maze Upper)": {"text": "They say that the #frozen cavern# echoes with #the Prelude of Light#.", "colors": ["Green", "Red"]},
    "SFM (Saria)": {"text": "They say that the #Ocarina of Time# teaches #the Nocturne of Shadow#.", "colors": ["Green", "Red"]},
    "ToT (Left)": {"text": "They say that #Kakariko Village# is on the way of the hero.", "colors": ["Light Blue"]},
    "ToT (Left-Center)": {"text": "They say that #Kakariko Village# is on the way of the hero.", "colors": ["Light Blue"]},
    "ToT (Right)": {"text": "They say that #Kakariko Village# is on the way of the hero.", "colors": ["Light Blue"]},
    "ToT (Right-Center)": {"text": "They say that #Kakariko Village# is on the way of the hero.", "colors": ["Light Blue"]},
    "ZD (Mweep)": {"text": "They say that slaying #50 Gold Skulltulas# reveals #Arrows (30 pieces)#.", "colors": ["Green", "Red"]},
    "ZF (Fairy)": {"text": "They say that the #Ocarina of Time# teaches #the Nocturne of Shadow#.", "colors": ["Green", "Red"]},
    "ZF (Jabu)": {"text": "They say that #Deku Tree# is on the way of the hero.", "colors": ["Light Blue"]},
    "ZR (Near Domain)": {"text": "They say that #Biggoron# crafts #a Recovery Heart#.", "colors": ["Green", "Red"]},
    "ZR (Near Grottos)": {"text": "They say that slaying #30 Gold Skulltulas# reveals #Bombchus (10 pieces)#.", "colors": ["Green", "Red"]},
    "ZR (Open Grotto)": {"text": "You found a spiritual Stone! By which I mean, I worship Nayru."}


    Voilà j'espère que c'est clair je ne sais pas si j'ai bien expliqué le problème, merci d'avance.

  2. #2
    Membre émérite

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 662
    Par défaut
    Salut,

    La fonction me semble étrange. Vous souhaitez parcourir toutes les clés du dictionnaire, or vous placez un return dans cette boucle sans condition. Donc on sort de la fonction dès la première itération. Il s'avère qu'il n'y a pas le motif recherché dans le première dictionnaire associé à la première clé. Donc la sortie est vide.

    Est-ce bien un set que vous souhaitez en sortie ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def hint_mapping(dict_, wanted="on the way"):
        return {k for k, v in dict_.items() if wanted in v["text"]}
    J

  3. #3
    Membre à l'essai
    Homme Profil pro
    -
    Inscrit en
    Novembre 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Suisse

    Informations professionnelles :
    Activité : -

    Informations forums :
    Inscription : Novembre 2020
    Messages : 4
    Par défaut
    A vrai dire je ne sais même pas ce que c'est qu'un "set", mais j'ai testé avec votre modification et ça fonctionne : j'aimerais juste les values en sortie et non les keys, et si je change votre code par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def hint_mapping(dict_, wanted="on the way"):
        return {v["text"] for k, v in dict_.items() if wanted in v["text"]}
    j'obtiens ce que je veux, merci bien!

    Et maintenant si je veux chaque values dans une nouvelle colonne et pas toutes dans la même, comment faire? (une ligne par fichier json, une colonne par value avec "on the way")

  4. #4
    Membre émérite

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 662
    Par défaut
    La fonction renvoi un set de chaines de caractères (les textes). Un set un container similaire à une liste mais ayant des spécificités comme l'unicité des valeurs, et l'impossibilité de modification des éléments qui y figurent.

    Si on exclut le fait que vous souhaitez faire le traitement sur plusieurs fichiers (avec une ligne dans votre futur tableau par fichier), comment celui-ci se présente avec les données de gossip_stones ? Quelles sont les colonnes ? Je comprends que vous voulez une colonne par texte trouvé, mais cette colonne elle doit bien avoir un nom, sinon comment créer un unique tableau avec plusieurs fichiers ?

    J

  5. #5
    Membre à l'essai
    Homme Profil pro
    -
    Inscrit en
    Novembre 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Suisse

    Informations professionnelles :
    Activité : -

    Informations forums :
    Inscription : Novembre 2020
    Messages : 4
    Par défaut
    Alors si possible il ne me faudrait pas un set car j'aimerais encore apporter des modifications aux éléments. Du coup si possible, j'aimerais le même résultat que j'obtiens avec le code posté avant, mais pas sous la forme de set ^^'
    Voilà à quoi ressemble mon DataFrame pour l'instant, avec 10'000 lignes:

    Nom : dataframe.png
Affichages : 95
Taille : 62,8 Ko


    Pour avoir plus de colonnes ce n'est pas un problème je peux en créer, le problème est juste que je ne vais pas comment faire pour dire à mon code d'ajouter la valeur dans la 2e colonne une fois qu'on a déjà ajouté une valeurs dans la première, ensuite dans la 3e colonne quand on a rempli les 2 premières etc...

    Sinon j'ai vu qu'il est possible de spliter les valeurs sur plusieurs colonnes avec pandas, c'est possible avec des listes mais je ne sais pas si ça l'est pour des sets.

  6. #6
    Membre à l'essai
    Homme Profil pro
    -
    Inscrit en
    Novembre 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Suisse

    Informations professionnelles :
    Activité : -

    Informations forums :
    Inscription : Novembre 2020
    Messages : 4
    Par défaut
    Superbe j'ai réussi avec ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hints_dataframe[['woth1','woth2','woth3','woth4']] = pd.DataFrame(hints_dataframe.Hints.values.tolist(),index=hints_dataframe.index)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Filtrer valeurs ListBox
    Par familledacp dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 29/05/2012, 06h48
  2. jqgrid peut filtrer valeur null?
    Par laomaotou dans le forum jQuery
    Réponses: 0
    Dernier message: 14/09/2011, 15h06
  3. [XL-2003] filtrer valeur d'un sous champ TCD
    Par nawakbling dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 17/01/2010, 22h18
  4. ADP filtrer si valeur presente dans sous-requette
    Par The Vandals dans le forum Access
    Réponses: 2
    Dernier message: 22/03/2006, 14h33
  5. [xslt] filtrer des valeurs numériques
    Par yos dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 20/09/2005, 12h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo