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 :

Renommage champs dans un tableau - Optimisation ? [Python 3.X]


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 5
    Points : 8
    Points
    8
    Par défaut Renommage champs dans un tableau - Optimisation ?
    Bonjour,

    J'ai écrit un bout de code dont le but est de modifier les champs d'une colonne, en fonction de leurs valeurs (Par exemple, un "RED" et un "R" vont devenir "Red").
    C'est très basique, par contre, je n'ai pas trouvé le moyen de l'optimiser en l'écrivant en utilisant moins de lignes (avec des "or" ou autres). Du coup, j'ai dupliqué bêtement mes lignes pour chaque valeur. Est-ce que vous auriez une idée d'optimisation de ce code ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    # On homogéneise le nom de la colonne Colour_raw
    df_config['Colour_raw'].loc[df_config['Colour_raw'] == 'RED'] = 'Red'
    df_config['Colour_raw'].loc[df_config['Colour_raw'] == 'R'] = 'Red'
    df_config['Colour_raw'].loc[df_config['Colour_raw'] == 'red'] = 'Red'
    df_config['Colour_raw'].loc[df_config['Colour_raw'] == 'BLUE'] = 'Blue'
    df_config['Colour_raw'].loc[df_config['Colour_raw'] == 'Bleu'] = 'Blue'
    df_config['Colour_raw'].loc[df_config['Colour_raw'] == 'Blue'] = 'Blue'
    df_config['Colour_raw'].loc[df_config['Colour_raw'] == 'B'] = 'Blue'
    df_config['Colour_raw'].loc[df_config['Colour_raw'] == 'G'] = 'Green'
    df_config['Colour_raw'].loc[df_config['Colour_raw'] == 'GREEN'] = 'Green'
    df_config['Colour_raw'].loc[df_config['Colour_raw'] == 'Green'] = 'Green'
    df_config['Colour_raw'].loc[df_config['Colour_raw'] == 'green'] = 'Green'
    df_config['Colour_raw'].loc[df_config['Colour_raw'] == 'O'] = 'Orange'
    df_config['Colour_raw'].loc[df_config['Colour_raw'] == 'Orang'] = 'Orange'
    df_config['Colour_raw'].loc[df_config['Colour_raw'] == 'Orange'] = 'Orange'
    df_config['Colour_raw'].loc[df_config['Colour_raw'] == 'PURP'] = 'Purple'
    df_config['Colour_raw'].loc[df_config['Colour_raw'] == 'Purpal'] = 'Purple'
    df_config['Colour_raw'].loc[df_config['Colour_raw'] == 'Purple'] = 'Purple'
    Merci par avance pour votre aide.

    PS.:
    A toutes fin utiles, je joints le code général dont il est issue.
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 466
    Points : 9 258
    Points
    9 258
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Je suggère une solution de ce genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    dico = {"R":"Red", "B":"Blue", "G":"Green", "O":"Orange", "P":"Purple"}        
    ch = "bl"
    try:
        ch = dico[ch.upper()[0]] 
    except KeyError:
        print("Erreur: la clé n'existe pas")
    except IndexError:
        print("Erreur: la chaine est vide")
    print(ch)
    Ce qui affiche ici: "Blue"

    Bien sûr, si on est sûr que la chaine ne contient que les 1ères lettres et n'est jamais vide, on peut se passer du try..except, ce qui simplifie le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dico = {"R":"Red", "B":"Blue", "G":"Green", "O":"Orange", "P":"Purple"}        
    ch = "bl"
    ch = dico[ch.upper()[0]] 
    print(ch)
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 5
    Points : 8
    Points
    8
    Par défaut Merci...mais
    Bonjour,

    Merci pour la réponse. En effet, on obtient bien la valeur souhaitée (ex. red) quelquesoit le format rentré (R, r, etc.).
    Par contre, j'ai essayé de l'appliquer à l'ensemble de ma colonne "Colour_raw" et pour le moment je n'ai pas trouvé le moyen. Est-ce qu'il faut que je boucle sur chaque ligne pour faire la comparaison ou y a t'il un moyen de l'appliquer à toute la colonne sans boucler?
    Pour le moment, je me retrouve avec ce cractère "ch" dont je ne sais pas trop quoi faire au niveau de mon tableau.

    Désolé, mais je suis dans mes tous premiers pas ....

    Merci par avance.

    Cdlt,

  4. #4
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 466
    Points : 9 258
    Points
    9 258
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par Aylafreya Voir le message
    Pour le moment, je me retrouve avec ce cractère "ch" dont je ne sais pas trop quoi faire au niveau de mon tableau.
    ch est ici le nom quelconque d'une variable qui pointe sur la chaine de caractère qu'on veut changer ("r" => "Red"). Vous la remplacez par la bonne variable de votre code.

    Cependant, je n'utilise ni pandas ni numpy, et de ce fait, il me manque trop d'éléments sur leur outils pour vous aider plus.

    Mais votre question sur "ch" me dit que vous avez absolument besoin d'en connaitre un peu plus sur Python. A défaut, vous allez buter trop souvent sur les bases du langage. Je vous recommande le cours ici: https://python.developpez.com/cours/apprendre-python3/.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 5
    Points : 8
    Points
    8
    Par défaut Résolu
    Bonjour,

    OK, j'ai répondu un peu rapidement, oui j'ai compris que Ch est une variable.
    Merci pour le lien vers le cours, il est intéressant.
    Pour le coup, j'ai trouvé la solution par un autre biais, au final c'est très basique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    df_config_final = df_config['Colour_raw'].replace({'R': 'Red','RED' : 'Red', 'red': 'Red', 'BLUE' : 'Blue', 'Bleu' : 'Blue',
                               'B': 'Blue','G' : 'Green', 'GREEN': 'Green', 'green': 'Green', 'O' : 'Orange', 'Orang' : 'Orange',
                               'PURP': 'Purple','Purpal' : 'Purple'})
    Merci pour le temps consacré et bonne journée.

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

Discussions similaires

  1. [Tableaux] Enlever des champs dans un tableau
    Par djudjublondin dans le forum Langage
    Réponses: 5
    Dernier message: 09/12/2007, 20h44
  2. [VBA-W2007]masquer un champ dans un tableau croisé dynamique
    Par tazamorte dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 24/08/2007, 10h25
  3. [MySQL] Comment affiché un résultat avec plusieurs lignes et plusieurs champs dans un tableau
    Par Yagami_Raito dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 15/05/2007, 14h19
  4. Déplacer champs dans un tableau
    Par blacksnake dans le forum Langage
    Réponses: 2
    Dernier message: 01/05/2007, 16h46
  5. Trouver un champ dans un tableau
    Par snaxisnake dans le forum Delphi
    Réponses: 6
    Dernier message: 30/05/2006, 16h37

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