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 :

reunion de date et données manquantes [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut reunion de date et données manquantes
    Bonjour,
    J'ai plusieurs fichiers csv que je voudrais réunir.
    Dans chaque csv, j'ai une date sur la première colonne et une données (int) sur la deuxième.
    Je souhaiterais réunir les fichiers csv en un seul avec la date dans la première colonne et les données dans les autres (pour 2017,2018,2019 et 2020).
    Le problème, c'est que sur certains csv, je n'ai pas forcément les mêmes dates : parfois, il y en a en plus et parfois en moins (par exemple, 2020 n'est pas complet)
    Il faudrait que je complète avec un None lorsque la donnée est manquante car je souhaite ensuite obtenir un graphe et il me faut donc le même nombre de données partout.
    Voici mon code pour l'année 2019 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    with open("datas.csv",'w',encoding = "utf-8", newline='') as data_fich:
        wr = csv.writer(data_fich)
        for date,el_2019 in zip(new_date_2019,voeux_cpge_2019):
            wr.writerow([date,el_2019])
    data_fich.close()
    J'obtiens (le début) :
    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
    24-Janvier	11
    27-Janvier	27
    28-Janvier	33
    29-Janvier	34
    30-Janvier	37
    31-Janvier	41
    01-Février	44
    02-Février	44
    03-Février	46
    04-Février	50
    05-Février	51
    06-Février	51
    07-Février	53
    08-Février	57
    09-Février	58
    10-Février	59
    12-Février	66
    13-Février	68
    14-Février	69
    J'espère avoir été assez clair.
    Je ne sais pas trop comment m'y prendre.
    J'ai des idées mais je crains que mes idées mènenet à un code illisible et compliqué.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    A priori, je fabriquerais un dictionnaire.
    La date étant la clef avec pour valeur la liste des données lues dans les différents fichiers: liste[0] serait la donnée lue dans le premier fichier, liste[1] celle qui est lue dans le second, etc...
    On sait le nombre de fichiers qu'il y a à lire et donc la longueur de la liste associée à chaque clef qu'on peut initialiser avec autant de None.
    A la lecture du i-ème fichier, si la clef n'existe pas on la crée avec sa liste associée plein de None et on met à jour valeur[i].

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Merci wiztricks,
    cela faisait partie de mes idées, le souci, je crois, c'est qu'un dictionnaire n'est pas ordonné.
    Si c'est le cas, il faudra que je le réordonne et je reporte le pb.
    Ceci dit, je ne maîtrise pas bien les dictionnaires ni les ensembles d'ailleurs.

  4. #4
    Membre très actif Avatar de viper1094
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2019
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2019
    Messages : 570
    Par défaut
    Salut,

    Python (comme beaucoup de langage) à une structure de données semblable aux dictionnaires, mais triés:
    https://docs.python.org/fr/3/library...ns.OrderedDict
    C'est probablement ce que tu cherches

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Citation Envoyé par marco056 Voir le message
    cela faisait partie de mes idées, le souci, je crois, c'est qu'un dictionnaire n'est pas ordonné.
    Si c'est le cas, il faudra que je le réordonne et je reporte le pb.
    Ce que j'ai compris du problème de départ était la gestion des "trous" dans les données récupérées dans les N fichiers.
    Et l'idée de base est d'initialiser une liste à N fois None où la colonne i sera la donnée du ième fichier.

    Si vous voulez faire çà avec des listes de listes (un tableau) et des insertions "ordonnées", ce seront des listes qui commencent par la "date" suivie de N None.

    Si vos fichiers sont déjà triés, çà pourrait être plus performant que de passer par un dictionnaire: inutile de parcourir toute la liste à chaque fois.

    Citation Envoyé par marco056 Voir le message
    Ceci dit, je ne maîtrise pas bien les dictionnaires ni les ensembles d'ailleurs.
    Dans le cas contraire, ce pourrait être l'occasion de regarder à quoi çà ressemble et ce qu'on peut faire avec.
    note: et oui il faudra trier ensuite mais sorted fera le boulot pour vous.

    Citation Envoyé par viper1094 Voir le message
    Python (comme beaucoup de langage) à une structure de données semblable aux dictionnaires, mais triés:
    https://docs.python.org/fr/3/library...ns.OrderedDict
    C'est probablement ce que tu cherches
    OrderedDict préserve l'ordre d'insertion pas la relation d'ordre qu'on pourrait avoir sur les clefs.
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> d = OrderedDict.fromkeys('cdbef')
    >>> d.keys()
    odict_keys(['c', 'd', 'b', 'e', 'f'])
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Merci à vous, voici où j'en suis rendu :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    from collections import OrderedDict
    nb_a = [0, 5, 5, 11, 13]
    dat_a = ['22-Janvier', '23-Janvier', '24-Janvier', '25-Janvier', '26-Janvier']
    nb_b = [11, 27, 33, 34, 37, 41, 44, 44, 46, 50, 51, 51, 53, 57, 58, 59, 66, 68, 69, 71, 74, 76, 79, 83, 87, 89, 90, 90, 91, 96, 99, 102, 107, 109, 122, 133, 141, 148, 155, 157, 161, 163, 170, 174, 176, 180, 186, 186, 186]
    dat_b = ['24-Janvier', '27-Janvier', '28-Janvier', '29-Janvier', '30-Janvier', '31-Janvier', '01-Février', '02-Février', '03-Février', '04-Février', '05-Février', '06-Février', '07-Février', '08-Février', '09-Février', '10-Février', '12-Février', '13-Février', '14-Février', '15-Février', '16-Février', '17-Février', '18-Février', '19-Février', '20-Février', '21-Février', '22-Février', '23-Février', '24-Février', '25-Février', '26-Février', '27-Février', '28-Février', '01-Mars', '03-Mars', '04-Mars', '05-Mars', '06-Mars', '07-Mars', '08-Mars', '09-Mars', '10-Mars', '11-Mars', '12-Mars', '13-Mars', '14-Mars', '15-Mars', '03-Avril', '10-Avril']
    nb_c = [177, 183, 191, 191, 191, 191, 191]
    dat_c = ['12-Mars', '13-Mars', '14-Mars', '15-Mars', '18-Mars', '31-Mars', '07-Avril']
    nb_d = [134, 134, 134]
    dat_d = ['14-Mars', '15-Mars', '18-Mars']
    dat_tot = list(set().union(dat_a,dat_b,dat_c,dat_d))
    print(dat_tot)
     
    def creer_dico(liste_dat,liste_nb):
        dico = OrderedDict()
        for i in range(len(liste_dat)):
            dico[liste_dat[i]] = liste_nb[i]
        return dico
     
     
    dico_a = creer_dico(dat_a,nb_a)
    dico_b = creer_dico(dat_b,nb_b)
    dico_c = creer_dico(dat_c,nb_c)
    dico_d = creer_dico(dat_d,nb_d)
     
    print(dico_a)
    print(dico_b)
    print(dico_c)
    print(dico_d)
    Il va falloir que je me penche sur l'union de ces dictionnaires ordonnées.
    Si vous pensez que je fais fausse route, dites-le moi...

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Je ne sais pas dans quel délire vous êtes parti mais pour "ranger" vos dates par ordre croissant, il faudrait avoir une représentation "cohérente" or ici "14-Mars" < "20-Janvier"...

    Ensuite simplifiez et reformulez votre problème!
    Vous avez 2 listes de tuples [['a', 1), ('b', 1)] et [['b', 2), ('c', 1)] et vous cherchez à obtenir [ ('a', 1, None), ('b', 1, 2), ('c', None, 2)]

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

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

Discussions similaires

  1. [AC-2003] Données manquantes par date
    Par elokapo dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 22/05/2013, 16h06
  2. Importation date avec beaucoup de données manquantes
    Par soph35 dans le forum SAS Base
    Réponses: 2
    Dernier message: 20/02/2013, 17h14
  3. [Oracle][Delphi]Données manquantes apre sun select
    Par LAPLACE dans le forum Oracle
    Réponses: 3
    Dernier message: 24/09/2007, 13h40
  4. mauvais controlfile créé - données manquantes
    Par saptech dans le forum Administration
    Réponses: 6
    Dernier message: 01/07/2007, 13h06
  5. Remplacement données manquantes
    Par HurtMarley dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 11/07/2006, 11h36

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