Fusions de tables
Traitement des données en table
Plan
Principe
Il est assez fréquent que des tables contiennent des noms de champs identiques. La fusion de table a pour objectif de créer une seule table à partir de deux. On appelle cela jointer des tables. Il existe plusieurs types de jointures. La jointure exclusive qui ne prend que les élèments dont le champ commun est dans les deux tables. Nous avons ensuite la jointure à gauche qui prend tous les élèments du premier fichier et uniquement ceux qui peuvent y être rattachés du 2nd fichier. Idem pour la jointure à droite. Si des noms de champs portent sur le même renseignement mais que ces noms sont différents, on peut préciser les noms de ces champs de jointure.
Méthode
Pour faire la fusion de tables nous allons encore utiliser la bibliothèque pandas et son instruction merge. Bien entendu cela ferait aussi un excellent exercice sur les listes de le coder par nous même.
import pandas result = pandas.read_csv('ClasseurMetalPointVirgule.csv',sep=';', encoding='latin-1') result2 = pandas.read_csv('ClasseurAlbumPourMerge.csv',sep=';', encoding='latin-1') merge=pandas.merge(result, result2) #merge trouve tout seul la colonne ayant le même nom de champs #et ne fusionne que les lignes dont le champs commun est présent dans les 2 tables #voici si les noms de champs sont différents (ce qui n'est pas le cas ici) merge=pandas.merge(result, result2,left_on='Album', right_on='Album') #et si l'on veut les lignes des deux fichiers même si pas le champs en commun # on aura alors NaN pour les champs qui n'existaient pas merge=pandas.merge(result, result2,on='Album', how="outer") #jointure exclusive encore ; merge=pandas.merge(result, result2,on='Album', how="inner") #prendre tout le fichier de droite, ici result2, et en plus tout ce qui est commun merge=pandas.merge(result, result2,on='Album', how="right") merge=pandas.merge(result, result2,on='Album', how="left")
Bien entendu on peut récupérer ce fichier fusion et en faire un nouveau fichier csv en utilisant to_csv de pandas.
merge.to_csv("merge.csv",sep=';',encoding='utf-8', index=False)
Exercices
-
Vous trouverez ci-dessous deux fichiers texte, à enregistrer au format txt (avec un copier coller) sous le nom de fichier1.txt et fichier2.txt sans les modifier.
L'objectif est de fusionner ces deux tables, uniquement si les noms et prenoms sont identiques, dans un seul fichier fusion.csv sans utiliser la bibliothèque pandas!
Vous devez utiliser fichier1 et fichier2 directement dans python (avec l'extension txt). Inutile de passer votre fichier dans excel pour le vérifier. Un fichier csv, n'est rien d'autre qu'un fichier txt avec des séparateurs et un indicateur de fin de ligne.
Voici le fichier1.txt
nom,prenom,age,musique Archi,Jacques,28,classique Legend,Paul,15,Jazz Urien,Antoine,16,Metal Zep,Bybi,40,Pop Perpro,Joan,22,Funk
Voici le fichier2.txt
nom;prenom;support Perpro;Joan;streaming Prunch;Toto;CD Archi;Jacques;CD Legend;Laurent;mp3 Urien;Antoine;streaming Pez;Bybi;radio Last;Lost;streaming
Voici ce que doit donner l'ouverture dans le tableur
nom prenom age musique support Archi Jacques 28 classique CD Urien Antoine 16 Metal streaming Perpro Joan 22 Funk streaming
- Faites la fusion des fichiers csv précédents avec pandas!