Vérification de l'intégrité

Joindre des données avec pandas

Aaren Stubberfield

Instructor

Vérifions nos données

Problème de fusion possible :

Deux DataFrames assemblés horizontalement avec une relation un-à-plusieurs

  • Relation un-à-plusieurs non intentionnelle
  • Relation multiple involontaire

Problème de concaténation possible :

![Deux DataFrames joints verticalement avec une ligne en double dans le deuxième DataFrame] (https://assets.datacamp.com/production/repositories/5486/datasets/7351b4473ab39f046f52cd465c871bf8c7128e3e/vertStackDFIntegrity.png =75)

  • Des enregistrements en double ont peut-être été introduits involontairement
Joindre des données avec pandas

Valider les fusions

.merge(validate=None) :

  • Vérifie si la fusion est du type spécifié
  • 'one_to_one'
  • 'one_to_many'
  • 'many_to_one'
  • 'many_to_many'
Joindre des données avec pandas

Fusionner un ensemble de données, par exemple

Nom de la table : tracks

  tid  name             aid  mtid  gid  u_price
0 2    Balls to the...  2    2     1    0.99   
1 3    Fast As a Shark  3    2     1    0.99   
2 4    Restless and...  3    2     1    0.99   

Nom de la table : specs

  tid  milliseconds  bytes  
0 2    342562        5510424
1 3    230619        3990994
2 2    252051        4331779
Joindre des données avec pandas

Valider la fusion : un-à-un

tracks.merge(specs, on='tid', 
             validate='one_to_one')
Traceback (most recent call last):
MergeError: Merge keys are not unique in right dataset; not a one-to-one merge
Joindre des données avec pandas

Valider la fusion : un_à_plusieurs

albums.merge(tracks, on='aid', 
             validate='one_to_many')
  aid  title            artid  tid  name             mtid  gid  u_price
0 2    Balls to the...  2      2    Balls to the...  2     1    0.99   
1 3    Restless and...  2      3    Fast As a Shark  2     1    0.99   
2 3    Restless and...  2      4    Restless and...  2     1    0.99   
Joindre des données avec pandas

Vérification des concaténations

.concat(verify_integrity=False) :

  • Vérifiez si le nouvel index concaténé contient des doublons
  • La valeur par défaut est False
Joindre des données avec pandas

Ensemble de données pour l'exemple .concat()

Nom de la table : inv_feb

     cid  invoice_date  total
iid 
7    38   2009-02-01    1.98 
8    40   2009-02-01    1.98 
9    42   2009-02-02    3.96 

Nom de la table : inv_mar

     cid  invoice_date  total
iid 
9    17   2009-03-04    1.98 
15   19   2009-03-04    1.98 
16   21   2009-03-05    3.96 
Joindre des données avec pandas

Vérification de la concaténation : exemple

pd.concat([inv_feb, inv_mar], 
          verify_integrity=True)
Traceback (most recent call last):
ValueError: Indexes have overlapping 
values: Int64Index([9], dtype='int64', 
name='iid')
pd.concat([inv_feb, inv_mar], 
          verify_integrity=False)
     cid  invoice_date  total
iid 
7    38   2009-02-01    1.98 
8    40   2009-02-01    1.98 
9    42   2009-02-02    3.96 
9    17   2009-03-04    1.98 
15   19   2009-03-04    1.98 
16   21   2009-03-05    3.96
Joindre des données avec pandas

Pourquoi vérifier l'intégrité et que faire ?

Pourquoi :

  • Les données du monde réel sont souvent PAS nettes

Que faire :

  • Corriger les données incorrectes
  • Supprimer les lignes en double
Joindre des données avec pandas

Passons à la pratique !

Joindre des données avec pandas

Preparing Video For Download...