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 :

parcours de dataframes et dictionnaires [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Août 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Août 2017
    Messages : 4
    Par défaut parcours de dataframes et dictionnaires
    Bonjour

    Je dispose d'une dataframe de type A où chaque ligne est indexée par une clé unique. Je dispose de plusieurs autres dataframes de type B, qui possèdent toutes une colonne contenant des clés du type A. On peut retrouver plusieurs lignes avec la même valeur de clé de type A*répétée. Chaque ligne d'une dataframe de type B*est indexée par une clé unique, et contient également 2 autres champs intéressants, une date et un montant. Comment créer une dataframe de type C indexée de la même manière que A et qui contient une colonne de dictionnaires où la clé est du type B (correspondant évidemment aux lignes qui contiennent la clé de type A ) et la valeur un couple (date, montant). L'implémentaion peut avoir de l'importance dans la mesure où chaque dataframe fait 100 000 lignes au moins.
    dataframe A
    cle_A_1 clair_A_1
    cle_A_2 clair_A_2
    cle_A_3 clair_A_3



    dataframe B
    cle_B_1 montant_B_1 date_B_1 cle_A_1
    cle_B_2 montant_B_2 date_B_2 cle_A_3
    cle_B_3 montant_B_3 date_B_3 cle_A_1
    cle_B_4 montant_B_4 date_B_4 cle_A_3
    cle_B_5 montant_B_5 date_B_5 cle_A_2

    Je souhaiterais que cela me donne

    cle_A_1 {cle_B_1:(date_B_1,montant_B_1),cle_B_3:(date_B_3,montant_B_3)}
    cle_A_2 {cle_B_5:(date_B_5,montant_B_5)}
    cle_A_3 {cle_B_2:(date_B_2,montant_B_2),cle_B_4:(date_B_4,montant_B_4)}

    Typiquement, la dataframe A représentent des contrats pluriannuels et les dataframes B les factures annuelles.

    Merci d'avance

  2. #2
    Membre confirmé Avatar de wh6b.
    Homme Profil pro
    Nicolas Vergnes
    Inscrit en
    Avril 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Nicolas Vergnes
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2017
    Messages : 17
    Par défaut
    salut

    Je reprends ton exemple, je te laisse le soin de faire la génération des 2 données en entrée en 2 dataframes
    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
    19
    import numpy as np
    import pandas as pd
     
    dfa = np.array([
    ['cle','contrat'],
    ['cle_A_1','clair_A_1'],
    ['cle_A_2','clair_A_2'],
    ['cle_A_3','clair_A_3']
    ])
    pda=pd.DataFrame(data=dfa[1:,1:], index=dfa[1:,0], columns=dfa[0,1:])
    dfb = np.array([
    ['cle','montant','date','fk_dfA'],
    ['cle_B_1','montant_B_1','date_B_1','cle_A_1'],
    ['cle_B_2','montant_B_2','date_B_2','cle_A_3'],
    ['cle_B_3','montant_B_3','date_B_3','cle_A_1'],
    ['cle_B_4','montant_B_4','date_B_4','cle_A_3'],
    ['cle_B_5','montant_B_5','date_B_5','cle_A_2']
    ])
    pdb=pd.DataFrame(data=dfb[1:,1:], index=dfb[1:,0], columns=dfb[0,1:])

    Je verrai un truc comme ça. Je pense qu'une grande quantité de données en entrée ne posera pas de problème avec cette façon.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import numpy as np
    import pandas as pd
    ## Generation du dataframe du résultat et de ses indexes
    pdr=pd.DataFrame(data=np.array([{}]*len(dfa[1:,0])), index=dfa[1:,0], columns=['val'])
    ## Remplissage du dataframe au bon format
    for index,row in pdb.iterrows() :
      montant,date,clefdfa = list(row)
      cell = { **pdr.loc[clefdfa]['val'], index:(date,montant)}
      pdr.set_value(clefdfa, 'val', cell)
     
    print('Affichage du resultat:')
    for index,row in pdr.iterrows() :
        print('%s   %s' % (index, row['val']) )

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Août 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Août 2017
    Messages : 4
    Par défaut Merci
    Merci

    C'est très propre et beaucoup plus rapide que ce que j'avais fait. Je suis débutant en python. Pour bien comprendre, quel est le sens du ** ?
    Bonne journée.

  4. #4
    Membre confirmé Avatar de wh6b.
    Homme Profil pro
    Nicolas Vergnes
    Inscrit en
    Avril 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Nicolas Vergnes
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2017
    Messages : 17
    Par défaut
    Si tu n'as des problèmes de perfs / volumétries et si tu n'utilises pas des fonctions particulières des dataframes, il sera plus intéressant de faire directement avec numpy plutot qu'avec les dataframes de panda. L'algorythme ressemblera à ce que j'ai proposé.
    les ** sont très (très) bien expliqués là : http://deusyss.developpez.com/tutori...n/args_kwargs/

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Ingénieur commercial
    Inscrit en
    Août 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur commercial

    Informations forums :
    Inscription : Août 2017
    Messages : 4
    Par défaut numpy ou panda
    L'origine des données, ce sont des fichiers csv avec une centaine de colonnes, certaines pas très propres (string et int mélangés,...) et j'en sélectionne une quarantaine, dont les index, montants et dates. Je dois conserver les autres colonnes car elles me renseignent sur des taux de TVA, etc...
    du coup la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    montant,date,clefdfa = list(row)
    m'embête "un peu".

    Bref des lignes hétérogènes et des colonnes que je dois nettoyer, convertir des formats de date, etc...

    Merci pour le lien **, je vais devenir *** un jour...

  6. #6
    Membre confirmé Avatar de wh6b.
    Homme Profil pro
    Nicolas Vergnes
    Inscrit en
    Avril 2017
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Nicolas Vergnes
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2017
    Messages : 17
    Par défaut
    Je pense que tu peux très bien utiliser des dictionnaires python si tu n'utilises pas des fonctionnalités des dataframes

    S'il y a d'autres champs en entrée il faudra alors récupérer les valeurs qui t'interessent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    montant = row['colonneA']
    date= row['colonneJ']
    clefdfa = row['colonneH']

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

Discussions similaires

  1. Un fichier dictionnaire ?
    Par portu dans le forum Windows
    Réponses: 6
    Dernier message: 17/04/2007, 15h26
  2. [Debutant(e)]Pb parcours de tableau
    Par joquetino dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 22/09/2004, 09h08
  3. [LG]Lenteur de parcours de fichier
    Par YéTeeh dans le forum Langage
    Réponses: 9
    Dernier message: 26/11/2003, 22h57
  4. Ordre de parcours de l'arbre...
    Par Sylvain James dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 01/12/2002, 18h41
  5. arbre de parcour d'arborescence windows
    Par chupachoc dans le forum Composants
    Réponses: 7
    Dernier message: 09/09/2002, 08h09

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