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 :

Soucis de concaténation de fichier CSV


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Juin 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 2
    Par défaut Soucis de concaténation de fichier CSV
    Bonjour,

    Je suis développeur mainframe et je suis actuellement en auto-formation sur le langage python.

    Pour m’entraîner, je suis entrain de développer un programme simple de web scrapping et de data-analyse afin de m'initier aux librairies bs et panda.

    Pour donner des éléments de contexte, je scrap le site de la FDJ pour récupérer les archives de l'euromillion pour pouvoir faire des stats sur les numéros (je sais très bien que je ne deviendrai pas millionnaire mais cela m'amuse ).

    Je rencontre actuellement un problème que je ne parviens pas à résoudre, malgré de nombreuses recherches sur différents sites.

    Mon programme récupère plusieurs fichiers csv que je cherche à concaténer. Ces fichiers n'ont pas le même nombre de colonnes mais chaque colonne est libellé de la même manière. Pour chaque fichier, je demande à mon programme d'effectuer une extraction des colonnes qui m'intéressent et de concaténer le résultat dans un fichier en sortie.

    L'extraction et la concaténation semble bien s'effectuer sauf pour le dernier fichier. Lorsque j'ouvre ce fichier, les données sont bien positionnées mais lorsque je fais un print() du contenu de ce fichier, les données sont décalées (colonne A avec contenu de la colonne B et colonne C avec contenu de la colonne B). Je fais également ce constat quand j'ouvre mon fichier concaténer.

    Je vous mets ci-dessous le code que j'ai utilisé pour réaliser ma concaténation. Pouvez-vous m'éclairer sur les cause de l'anomalie car je sèche complètement.


    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
     
    ## concaténation des fichiers
    filenames           = find_csv_filenames("./fichiers") #récupération des fichiers csv du dossier
    concat_file_temp    = pd.DataFrame()
    concat_file         = pd.DataFrame()
    euromillion_finale  = pd.DataFrame()
     
    for name in filenames:
            print(name)
            concat_file_temp  = pd.read_csv("./fichiers/"+name,delimiter=';',engine='python')    
            concat_file       = concat_file_temp[['boules_gagnantes_en_ordre_croissant', 'etoiles_gagnantes_en_ordre_croissant']]
            print(concat_file)        
            euromillion_finale = pd.concat([euromillion_finale,concat_file])
     
    ## Ecriture des fusions de fichier
    euromillion_finale.to_csv("./fichiers_resultat/euromillion_finale.csv",index=False,header=True,sep=',')
    Ci-dessous les résultats du print d'un fichier bien pris en charge:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        boules_gagnantes_en_ordre_croissant etoiles_gagnantes_en_ordre_croissant
    0                      -11-16-20-22-28-                                -4-9-
    1                      -15-25-38-40-41-                                -1-2-
    ...
    376                     -7-13-39-47-50-                                -2-5-
    377                    -16-29-32-36-41-                                -7-9-
    Ci-dessous les résultats du print du fichier problématique:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
            boules_gagnantes_en_ordre_croissant  \
    2016078                              -2-12-   
    2016079                              -2-10- 
    ...
    2019016                               -3-7-   
    2019017                               -3-4- 
             etoiles_gagnantes_en_ordre_croissant  
    2016078                                     0  
    2016079                                     0
    ...
    2019016                                     0  
    2019017                                     0
    A la place des numéros de lignes, j'ai le contenu de la première colonne du fichier. De plus le résultat du print() n’apparaît pas de la même manière.

    Je vous remercie d'avance pour vos suggestions.

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    2 pistes à explorer :
    1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    filenames=filenames[-1]+filenames[:-1]
    Avec ca vous mettez le dernier fichier, au début de la liste. Est ce qu'il y a toujours un problème avec ce fichier (et donc dès la première itération), ou est ce que c'est toujours le dernier fichier de la liste qui pose problème ?
    2) Si à 1), c'est la 1ère option, alors ça peut venir du fichier d'entrée lui même. Ouvrez le avec les outils de votre choix pour le comparer (excel par exemple, ou bien une bibliothèque de traitement de CSV dans un langage que vous ma). Il peut manquer des tabulations par exemple dans ce fichier, ce qui peut causer le décalage.

    Quand on récupère des données comme ca sur la toile, on n'est jamais à l'abri qu'il y ait quelques hétérogénéités.

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Juin 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 2
    Par défaut
    Bonjour,

    merci pour votre réponse.

    Le soucis se produit même quand je n'utilise que le fichier en question. Ça ne vient donc pas de la position dans l'ordre de concaténation mais bien du fichier en lui même, qui doit avoir une particularité ou alors un encodage CSV défaillant ou autre.
    Le programme plante même sur ce fichier lorsque je tente de lire le contenu d'une ligne d'une des colonnes que je cherche à extraire.

    Du coup j'ai trouvé une petite parade pour contourner le problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            try:
                test_ligne = concat_file_temp['etoiles_gagnantes_en_ordre_croissant'][0]
                concat_file = concat_file_temp[['boules_gagnantes_en_ordre_croissant', 'etoiles_gagnantes_en_ordre_croissant']]
            except:
                concat_file_temp['etoiles_gagnantes_en_ordre_croissant'] = concat_file_temp['boules_gagnantes_en_ordre_croissant']
                concat_file_temp['boules_gagnantes_en_ordre_croissant'] = concat_file_temp['etoile_2']            
                concat_file = concat_file_temp[['boules_gagnantes_en_ordre_croissant', 'etoiles_gagnantes_en_ordre_croissant']]
    Ce n'est pas vraiment pérenne mais bon en attendant, cela fera l'affaire.

    Toutefois je suis toujours preneur d'une solution plus propre

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 816
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

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

    Informations forums :
    Inscription : Février 2006
    Messages : 12 816
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par avoyez Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	try:
    		...
    	except:
    		...
    Toutefois je suis toujours preneur d'une solution plus propre
    Tu devrais mieux cibler ton exception plutôt que de tout benner en vrac. D'autant plus que tu as le droit d'en cibler plusieurs d'un coup => except (X, Y, Z): ....
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. [XL-2016] Concaténation de fichiers csv pour opérations
    Par Wenchetan dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/04/2019, 12h28
  2. Concaténer fichier CSV
    Par cyril383 dans le forum Scilab
    Réponses: 4
    Dernier message: 11/06/2014, 14h57
  3. [PHP 5.2] souci lecture fichier csv
    Par pas30 dans le forum Langage
    Réponses: 1
    Dernier message: 21/03/2012, 09h47
  4. Concaténation de fichiers csv avec tri
    Par lfournial dans le forum Général Java
    Réponses: 8
    Dernier message: 25/04/2008, 11h23
  5. Concaténation de fichier csv avec entête
    Par MottetCCSF dans le forum Langage
    Réponses: 1
    Dernier message: 19/12/2007, 20h46

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