Vous êtes sur la page 1sur 5

IHEC Carthage - Institut des Hautes Etudes Commerciales

Les fonctionnalités python essentielles


pour le nettoyage des données
Responsable : Dr. Jihène Tounsi

Lecture et écriture de fichiers


#On importe la librairie pandas sous le nom pd

import pandas as pd

#On importe le fichier contenant les données sous format csv avec la
fonction read_csv() de pandas

df=pd.read_csv("nomdufichier.csv")

#On importe le fichier contenant les données en n’enlevant la première


ligne

df=pd.read_csv("nomdufichier.csv", Skiprows=1, index_col= )

Lecture d'un dataframe à partir d'un fichier :

 df = pd.read_csv('myFile.csv') : par défaut, suppose qu'il y a un header


(header = 0) et qu'il n'y a pas de noms de colonne (index_col = None).
 sep = '\t' ou delimiter = '\t' : indique que le séparateur est une
tabulation plutôt qu'une virgule.
 si tableau avec étiquettes de lignes et de colonnes : df =
pd.read_csv('myFile.csv', sep = '\t', index_col = 0) (index_col est en
fait le numéro de colonne contenant l'index).
 si tableau avec étiquettes de colonnes seulement : df =
pd.read_csv('myFile.csv', sep = '\t').
 si tableau avec étiquettes de lignes seulement : df =
pd.read_csv('myFile.csv', sep = '\t', header = None, index_col = 0).
 si tableau sans étiquettes de lignes ni de colonnes : df =
pd.read_csv('myFile.csv', sep = '\t', header = None).
 df = pd.read_csv(fileName, sep = '\t', converters = {'barcode': str} :
convertit la colonne barcode avec la fonction str. Attention :
o si on se trompe dans le nom, le converter est ignoré et aucune
erreur !
o si on met un converter de type str, le na_values n'est pas pris
en compte !
 on peut imposer des noms aux colonnes :
o si pas de header (noms de colonnes) dans le fichier initial : df
= pd.read_csv('myFile.csv', sep = '\t', names = ['X1', 'X2',
'X3'])
o si il y a déjà un header (noms de colonnes) dans le fichier
initial : df = pd.read_csv('myFile.csv', sep = '\t', names =
['X1', 'X2', 'X3'], header = 0).
 df = pd.read_csv('myFile.csv', sep = '\t', na_values = ['-']) : on
donne avec na_values la liste des valeurs qui doivent être assimilées
à NaN (valeur non définie) :
o par défaut, '', '#N/A', 'N/A', 'NA', 'NULL', 'null', 'NaN',
'n/a', 'nan' sont tous interprêtés comme nan
o mettre na_filter = False en laissant le défaut pour na_values
pour éviter que les cellules vides se transforment en NaN.
IHEC Carthage - Institut des Hautes Etudes Commerciales

 Pour préciser les types de certaines colonnes, on peut faire : df =


read_csv(myFile, sep = '\t', dtype = {'col1': str, 'col2': int, 'col4':
numpy.float})
 df = pd.read_csv('myFile.csv', sep = '\t', skiprows = [0, 1]) : lit le
fichier en sautant les lignes 0 et 1 du fichier (donc ici, le header
est sur la 3ème ligne, d'index 2). Très utile si ces lignes contiennent
des intitulés qui perturbent alors complètement le typage de chaque
colonne !
 skip_footer = 5 : saute les 5 dernières lignes du fichier.
 attention : si nom de colonne répété, le deuxième est modifié avec une
extension .1, le troisième avec une extension .2, etc ...
 on peut lire seulement le début d'un tableau : df = pd.read_csv(...,
nrows = 1000) (utile pour le debugging !)

Ecriture d'un dataframe dans un fichier :

 df.to_csv('myFile.csv', sep = '\t') : écrit le dataframe avec une


tabulation comme séparateur (le défaut est une virgule).
 header = False : supprime le header des colonnes (défaut est de
l'inclure).
 index = False : supprime le nom des lignes (défaut est de l'inclure).
 na_rep = '-' : imprime les valeurs NaN comme '-' (le défaut est la
chaîne vide).

L’analyse des données ou la compréhension du jeu de données

# La méthode head() permet de visualiser les 5 premières lignes (par


défault, si l'on désire changer ce chiffre il suffit de le spécifier entre
parenthèses) de notre DataFrame

df.head()

#La méthode tail() permet de visualiser les 5 dernières lignes (par


défault, si l'on désire changer ce chiffre il suffit de le spécifier entre
parenthèses) de notre DataFrame

df.tail()

#La fonction permet de connaître le nombre de lignes du DataFrame

len(df)

#L’attribut shape permet de connaître les dimensions du DataFrame

df.shape

#L'attribut dtypes permet de connaître le type de variables de notre


DataFrame
df.dtypes

#La méthode info permet de connaître à la fois le nom des variables, le


nombre de lignes, le nombre de données manquantes, le type des variables

df.info()
IHEC Carthage - Institut des Hautes Etudes Commerciales

#La méthode describe() donne les statistiques élémentaires des variables

df.describe()

#La méthode duplicated() permet de savoir s'il y a des doublons dans la


dataframe, on peut spécifier une colonne entre guillemets ou une partie des
colonnes entre crochets
df.duplicated()

#La méthode sum() appliquée à la méthode duplicated permet de connaître le


nombre de doublons

df.duplicated().sum()

#La méthode drop_duplicates() permet de supprimer les doublons au sein de


la dataframe, on peut spécifier une colonne entre guillemets ou une partie
des colonnes entre crochets

df.drop_duplicates()

#Les méthodes isnull() et isna() permettent de savoir s'il y a


respectivement des éléments manquants ou nuls au sein d'un DataFrame

df.isnull()
df.isna()

#La méthode sum() permet de connaître le nombre de valeurs nulles. Dans


notre DataFrame avec isnull elle permet d’avoir le nombre d’éléments null

df.isnull().sum()

Fonction sur les dataframes

 df.mean() : renvoie une Series des moyennes de chaque colonne (en


ignorant les NaN) :
 df.mean(skipna = False) : si il y a un NaN sur la ligne, la valeur
sortie est NaN.
 df.mean(axis = 1) : calcule les moyennes par ligne plutôt que par
colonne.
 fonctions similaires à mean :
o min, max
o median : la médiane.
o std : la déviation standard (écart-type) qui par défaut est
normalisée avec N-1 (mais on peut le changer avec le paramètre
ddof qui vaut 1 par défaut : df.std(ddof = 0)).
o var : la variance normalisée avec N-1
o mad : la MAD.
o sum, prod : la somme, le produit.

Accès selon une condition :


 df[df['A'] > 2] : renvoie un dataframe avec seulement les lignes où
la condition est vérifiée
IHEC Carthage - Institut des Hautes Etudes Commerciales

Destruction de colonnes d'un dataframe :


 del df['A'] : permet de détruire la colonne A.
 df.drop(['A', 'C'], axis = 1, inplace = True) : permet de détruire plusieurs colonnes en même
temps (dans ce cas la colonne A et C). L’attribut inplace permet de faire la modification
directement dans df.

Copie d'un dataframe :

 df2 = df.copy() : df2 est alors un dataframe indépendant.


 par contre, si on fait : df2 = df et que l'on modifie df2, df est également modifié (df et df2
pointent vers le même objet).

Changement des valeurs en batch d'un dataframe :


 df[df > 0] = 1 remplace toutes les valeurs différentes de 0 par 1

L’imputation des valeurs manquantes


#La méthode dropna() permet de supprimer les données manquantes: on peut
spécifier l'axe de suppression axis=0 on supprime les lignes où il y a des
données manquantes, axis=1 on supprime les colonnes où il y a des données
manquantes

df.dropna()

df.dropna(axis = 1, how = 'any') : supprime les colonnes ayant au moins un


NaN plutôt que les lignes (le défaut est axis = 0).

df.dropna(inplace = True) : ne renvoie rien, mais fait la modification en


place.

#On peut imputer les valeurs manquantes avec la valeur moyenne ou encore
avec la valeur la plus présente dans la colonne.

df.fillna(df.mean()) #moyenne
df.fillna(df.mode()) #valeur la plus présente

Traitement des valeurs aberrantes /Outliers


#on importe la librairie seaborn sous le nom sns

import seaborn as sns

#On affiche le boxplot associé à la variable

sns.boxplot(df['nomdelacolonne'])
IHEC Carthage - Institut des Hautes Etudes Commerciales

#On supprime les valeurs aberrantes


#On calcule Q1

q1=df["nomdelacolonne"].quantile(q=0.25)

#On calcule Q3

q3=df["nomdelacolonne"].quantile(q=0.75)

#On calcule l'écart interquartile (IQR)

IQR=q3-q1

#On calcule la borne inférieure à l'aide du Q1 et de l'écart interquartile

borne_inf = q1-1.5*IQR

#On calcule la borne supérieure à l'aide du Q3 et de l'écart interquartile

borne_sup = q3 +1.5*IQR

#On garde les valeurs à l'intérieur de la borne inférieure et supérieure

df= df[df["nomdelacolonne"]<borne_sup]
df=df[df["nomdelacolonne"]>borne_inf]

Traitement des dates


#On transforme la date en datetime pour que python puisse la considérer
#comme une date
df['colonne_Date'] = pd.to_datetime(df['colonne_Date'])

syntaxe:
pd.to_datetime(arg, errors='raise', dayfirst=False, yearfirst=False,
utc=None, box=True, format=None, exact=True, unit=None,
infer_datetime_format=False, origin='unix', cache=False)

Paramètres:
 arg: Un entier, une chaîne, un flotteur, une liste ou un objet à
convertir en objet d’heure de date.
 dayfirst: Valeur boolean, place le premier jour si vrai.
 yearfirst: Valeur boolean, place l’année d’abord si vrai.
 utc: Valeur Boolean, Retournes time in UTC si vrai.
 format : Entrée de chaîne pour indiquer la position du jour, du mois
et de l’année.

Vous aimerez peut-être aussi