Dans cette section, nous abordons des techniques et des considérations avancées pour travailler avec Pandas, qui sont particulièrement utiles lorsqu’il s’agit de traiter de grands ensembles de données et des structures de données complexes.
Opérations par éléments à l’aide de eval #
eval()
: La méthodeeval()
de Pandas te permet d’effectuer des opérations élément par élément sur un DataFrame à l’aide d’une expression string. Elle est particulièrement utile pour les DataFrames de grande taille et les opérations complexes.
Dans cet exemple, nous utilisons eval()
pour créer une nouvelle colonne ‘C’ en effectuant l’addition par élément des colonnes ‘A’ et ‘B’. Le paramètre inplace=True
met à jour le DataFrame à la place.
# Exemple de DataFrame import pandas as pd data = {'A': [1, 2, 3, 4], 'B': [10, 20, 30, 40]} df = pd.DataFrame(data) # Utiliser eval pour créer une nouvelle colonne C df.eval('C = A + B', inplace=True) # Calculer une nouvelle colonne 'D' à l'aide d'une expression complexe df.eval('D = (A * 2) + (B / 3)', inplace=True)
Opérations avancées de filtrage à l’aide de query #
query()
: La méthodequery()
permet de filtrer les lignes d’un DataFrame en fonction d’une condition spécifiée à l’aide d’une expression string. C’est un moyen concis de filtrer les données.
Dans cet exemple, nous utilisons query()
pour filtrer les lignes dont l’âge est supérieur à 30.
# Exemple de DataFrame import pandas as pd data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'], 'Age': [25, 30, 35, 40], 'Salary': [50000, 60000, 70000, 80000]} df = pd.DataFrame(data) # Utilisation de query pour filtrer les lignes filtered_df = df.query('Age > 30') # Utiliser query pour filtrer les lignes en fonction de plusieurs conditions filtered_df = df.query('(Age > 30) and (Salary > 60000)')
Les fonctions eval()
et query()
sont toutes deux conçues pour améliorer les performances lors de l’utilisation de DataFrames de grande taille et d’opérations complexes.
Multi-indexage #
La multi-indexation, également connue sous le nom d’indexation hiérarchique, te permet de créer des structures DataFrame avec plusieurs niveaux de hiérarchie d’index. Elle est particulièrement utile pour traiter des données comportant des relations complexes et multidimensionnelles.
import pandas as pd # Exemple de DataFrame hiérarchique data = {'Department': ['HR', 'HR', 'Engineering', 'Engineering'], 'Employee': ['Alice', 'Bob', 'Charlie', 'David'], 'Salary': [60_000, 65_000, 80_000, 75_000]} df = pd.DataFrame(data) # Créer un index hiérarchique hierarchical_df = df.set_index(['Department', 'Employee']) # Accéder aux données print(hierarchical_df.loc[('HR','Bob')]) # Accéder aux données Bob du département RH
Traitement des valeurs aberrantes #
Comme leur nom l’indique, les valeurs aberrantes sont des valeurs qui s’écartent du reste des données. Le traitement des valeurs aberrantes est une étape essentielle du pré-traitement des données, car les valeurs aberrantes peuvent avoir un impact significatif sur les résultats de ton analyse et de tes modèles statistiques.
- Identifier les valeurs aberrantes : Heureusement, tu sais maintenant comment tracer un diagramme en boîte et nous pouvons l’utiliser pour visualiser les valeurs aberrantes. La boîte du graphique représente l’intervalle interquartile (IIQ), c’est-à-dire l’intervalle entre le premier quartile (Q1) et le troisième quartile (Q3) des données. La longueur de la boîte indique la dispersion de la moitié centrale des données.
Les « moustaches » sont des lignes qui s’étendent à partir des bords de la boîte. Elles représentent l’étendue des données à une certaine distance des quartiles. En règle générale, elles représentent 1,5 fois le IIQ. Tout point de données situé en dehors de cet intervalle est considéré comme une valeur aberrante potentielle.
Remarque : il est important de noter que tous les points de données situés en dehors des moustaches ne sont pas nécessairement des valeurs aberrantes ; ils sont considérés comme des valeurs aberrantes potentielles qui doivent faire l’objet d’un examen plus approfondi. Les valeurs aberrantes peuvent fournir des informations précieuses ou des erreurs dans les données, il est donc essentiel de comprendre le contexte et le domaine pour décider comment les traiter.
# Créer un exemple de DataFrame data = {'Values': [25, 30, 200, 40, 20, 300, 35, 45, 30]} df = pd.DataFrame(data) # Diagramme en boîte pour visualiser les valeurs aberrantes df.boxplot(column='Values')
- Traitement des valeurs aberrantes par NaN : une fois les valeurs aberrantes identifiées, tu peux les traiter manuellement. Plusieurs options s’offrent à toi. Tu peux remplacer les valeurs aberrantes par NaN afin de les supprimer des calculs. Si tu décides de le faire, voici comment procéder.
threshold = 100 # Définissez ton seuil pour les valeurs aberrantes df['Values'][df['Values'] > threshold] = None # Remplacer les valeurs aberrantes par NaN
- Traitement des valeurs aberrantes par écrêtage : L’écrêtage consiste à fixer des limites supérieures et inférieures à une variable afin de limiter les valeurs extrêmes à une plage spécifiée. Cela peut être utile pour atténuer l’impact des valeurs aberrantes sans les supprimer entièrement de l’ensemble de données. Il remplace les valeurs du DataFrame par les limites spécifiées si elles se situent en dehors de l’intervalle spécifié.
Dans cet exemple, les valeurs 200, 300 et -100 sont des valeurs aberrantes. Une fois que nous avons défini une plage de limites inférieure et supérieure, nous pouvons la passer dans la fonction clip
. Toutes les valeurs supérieures à la limite supérieure seront remplacées par les valeurs de la limite supérieure, et de la même manière, les valeurs inférieures à la limite inférieure seront remplacées par les valeurs de la limite inférieure. Ainsi, 200 et 300 seront remplacés par 100 et -100 sera remplacé par 0.
# Créer un exemple de DataFrame data = {'Values': [25, 30, 200, 40, 20, 300, 35, 45, -100]} df = pd.DataFrame(data) # Définir les limites supérieures et inférieures lower_bound = 0 upper_bound = 100 # Réduire les valeurs aux limites spécifiées df['Values'] = df['Values'].clip(lower=lower_bound, upper=upper_bound) df ---------------------------------------------------------------------- output: Values 0 25 1 30 2 100 3 40 4 20 5 100 6 35 7 45 8 0
Optimisation de la mémoire #
L’optimisation de la mémoire est utile partout, n’est-ce pas ? Cependant, elle est cruciale lorsque l’on travaille avec de grands ensembles de données. Pandas propose des techniques pour réduire la consommation de mémoire tout en maintenant l’intégrité des données.
- Choisir les bons types de données :
– Utilise les types de données appropriés pour tes colonnes. Par exemple, utiliseint8
ouint16
pour les colonnes de nombres entiers avec de petites plages de valeurs, etfloat32
pour les colonnes de nombres à virgule flottante.
– Envisage d’utiliser des types de données catégorielles pour les colonnes comportant un nombre limité de valeurs uniques. Cela permet de réduire l’utilisation de la mémoire et d’améliorer les performances lors de l’utilisation de données catégorielles. - Utiliser des structures de données éparses si tes données comportent trop de valeurs manquantes :
– Pandas prend en charge les structures de données éparses, telles queSparseDataFrame
etSparseSeries
, qui conviennent aux ensembles de données comportant de nombreuses valeurs manquantes.
– Les structures de données éparses ne stockent que les valeurs non manquantes, ce qui réduit l’utilisation de la mémoire. - Lire les données par morceaux :
– Lorsque tu lis de grands ensembles de données à partir de sources externes, utilise le paramètrechunksize
de fonctions telles queread_csv()
pour lire les données par petits morceaux plutôt que de charger l’ensemble de l’ensemble de données en mémoire en une seule fois. - Optimiser les opérations GroupBy :
– Utilise le paramètreas_index=False
lors des opérations GroupBy afin d’éviter la création d’un nouvel index, qui peut consommer de la mémoire supplémentaire. - Libérer les DataFrames inutiles :
– Libère explicitement de la mémoire en supprimant les DataFrames ou Series qui ne sont plus nécessaires, à l’aide du mot-clédel
. Cela permet de libérer de la mémoire pour d’autres opérations.
En implémentant ces techniques d’optimisation de la mémoire, tu peux gérer efficacement l’utilisation de la mémoire lorsque tu travailles avec de grands ensembles de données dans Pandas, en améliorant à la fois les performances et la capacité à travailler avec des données qui, autrement, ne tiendraient pas en mémoire.
Conclusion #
Dans ce tuto complet Pandas, nous avons couvert un large éventail de sujets, depuis les structures de données et le chargement de données jusqu’aux techniques avancées pour traiter efficacement des ensembles de données complexes, ce qui en fait une ressource précieuse pour les débutants et un aide-mémoire utile pour les data scientists expérimentés. Cependant, n’oublie pas que tout est dans la pratique !