Cours
Si vous préférez apprendre les listes dans un format cours, jetez un œil à notre cours Intro to Python for Data Science, qui comprend un chapitre sur les listes en Python.
Contexte
Les listes sont un sujet de plus en plus populaire, aussi bien pour ceux qui débutent en Python que pour les utilisateurs confirmés. Si l’on en croit les résultats de recherche de Google Trends, l’intérêt pour ce thème progresse chaque année.
Si vous fréquentez régulièrement des forums pour poser ou répondre à des questions de programmation Python, comme Stack Overflow, Quora ou Reddit, vous en connaissez sans doute la raison.
De nombreuses questions Python arrivent sur ces forums et y restent, où les utilisateurs les marquent comme « duplicata » ou « sticky », les upvotent, ou débattent ensemble de la meilleure solution.
Avec cet article, DataCamp souhaite vous aider à traiter un sujet précis : les questions les plus fréquemment posées sur les listes en Python — et de façon interactive !
Qu’est-ce qu’une liste Python, exactement ?
Les listes font partie des quatre structures de données intégrées en Python, avec les tuples, les dictionnaires et les ensembles (sets). Elles servent à stocker une collection ordonnée d’éléments, potentiellement de types différents (même si, en pratique, c’est souvent homogène). Les éléments sont séparés par des virgules et encadrés par des crochets. Comme dans cet exemple :
Vous voyez que la seconde variable biggerZoo est une liste similaire à la variable zoo. Cependant, biggerZoo contient en plus une autre liste avec différents types de singes.
Comme les listes stockent des collections ordonnées d’éléments ou d’objets, on dit que ce sont des types séquentiels, car elles se comportent comme une séquence. D’autres types considérés comme séquentiels sont les chaînes de caractères (strings) et les tuples.
Qu’ont de particulier les types séquentiels ? En bref, le programme peut itérer dessus ! C’est pour cela que les listes, chaînes, tuples et ensembles sont appelés des « itérables ».
Gardez ce concept en tête : il est fondamental et vous le retrouverez dans d’autres langages utilisés en data science, comme Scala.
Passons maintenant à la pratique ! Voici les questions sur les listes qui reviennent le plus souvent chez les programmeurs Python. Voici la liste de toutes celles auxquelles nous allons répondre dans ce tutoriel :
1. Quand utiliser des listes Python, et quand préférer des tuples, dictionnaires ou sets
À la lecture, l’introduction paraît simple. Mais lorsqu’on code un petit script Python ou un projet complet, le choix entre liste et autre type séquentiel n’est pas toujours évident.
Pourtant, choisir la bonne structure de données est essentiel.
Poursuivez la lecture pour en savoir plus.
Listes vs tuples
Les tuples servent à regrouper une liste ordonnée d’éléments immuable. Cela signifie que :
- Vous ne pouvez pas ajouter d’éléments à un tuple. Il n’y a pas de méthodes
append()ouextend()pour les tuples, - Vous ne pouvez pas en retirer. Pas de méthodes
remove()oupop(), - Vous pouvez rechercher des éléments dans un tuple, car cela ne le modifie pas.
- Vous pouvez aussi utiliser l’opérateur
inpour vérifier la présence d’un élément.
Donc, si vous définissez un ensemble de valeurs constant et que vous ne ferez que l’itérer, utilisez un tuple plutôt qu’une liste. C’est plus rapide et plus sûr, les tuples étant « protégés en écriture ».
Listes vs dictionnaires
- Une liste stocke une collection ordonnée d’éléments. Les dictionnaires, eux, ne garantissent pas d’ordre.
- Les dictionnaires associent chaque clé à une valeur, tandis que les listes ne contiennent que des valeurs.
Utilisez un dictionnaire quand vous avez un ensemble non ordonné de clés uniques mappées à des valeurs.
Remarque : comme clés et valeurs sont liées, les vérifications d’appartenance peuvent être plus performantes qu’avec des listes.
Listes vs sets
- Comme les dictionnaires, les sets n’imposent pas d’ordre à leur collection. Contrairement aux listes.
- Un set exige des éléments hachables (hashable), tandis qu’une liste peut stocker des éléments non hachables.
- Un set contient des éléments uniques et immuables. Les doublons sont interdits, alors que les listes les autorisent et sont mutables.
Utilisez des sets lorsque vous avez un ensemble non ordonné de valeurs uniques, immuables et hachables.
Vous n’êtes pas sûr de ce qui est hachable ?
Consultez ce rappel :
| Hachable | Non hachable |
|---|---|
| Floats | Dictionnaires |
| Entiers | Sets |
| Tuples | Listes |
| Chaînes | |
frozenset() |
Astuce : ne nous croyez pas sur parole ! Testez ci-dessous et expérimentez dans un shell IPython :)
Remarque : avec des éléments hachables, les tests d’appartenance (savoir si un élément est présent) sont plus rapides avec des sets qu’avec des listes.
2. Comment sélectionner un élément d’une liste
Pour bien travailler avec les listes, il faut savoir y accéder.
On accède typiquement aux listes pour modifier, mettre à jour, supprimer des valeurs, ou effectuer d’autres opérations. La façon d’accéder aux listes, et plus largement à tous les types séquentiels, est d’utiliser l’opérateur d’indexation [ ]. À l’intérieur, on met un entier.
Exemple :
Exécutez et observez le résultat. Le premier élément de biggerZoo est renvoyé. Attention : les indices commencent à 0, pas à 1.
Récupérer le dernier élément d’une liste
C’est un complément à l’explication précédente.
Utilisez un indice négatif, comme -1 ou -2, pour récupérer les derniers éléments de biggerZoo !
Pas sorcier, n’est-ce pas ?
Que signifie l’erreur « Index out of range » ?
Vous la verrez souvent, surtout quand vous débutez en programmation ou sur Python.
Le mieux pour comprendre, c’est d’essayer vous‑même.
Utilisez le widget interactif ci‑dessus et passez des indices négatifs trop petits ou positifs trop grands !
Comme vous le verrez, l’erreur « Index Out Of Range » apparaît quand vous donnez à l’opérateur d’indexation une valeur entière supérieure (ou trop inférieure) à la longueur de la liste : vous référencez une position qui n’existe pas (encore).
Voici un code qui déclenchera cette erreur. Lancez‑le pour confirmer !
La notation de tranche (slice) dans les listes
Quand on débute, c’est un point parfois déroutant.
On utilise la notation de tranche pour sélectionner plusieurs éléments à la fois. Comme pour un seul élément, on utilise des crochets. Particularité : au lieu d’un entier seul, on place un : entre deux indices, par exemple :
On obtient ici la liste biggerZoo à partir de l’entrée panda (indice 2) jusqu’à la fin. Autrement dit, on commence à 2 et on va jusqu’au bout, puisqu’aucune borne de fin n’est précisée.
Et dans l’autre sens ?
Exécutez et vérifiez !
Cette fois, on récupère seulement bear et lion. On part de l’indice 0 et on va jusqu’à 2. Contrairement à ce qu’on pourrait attendre, le résultat n’inclut pas panda.
En général :
# éléments de start jusqu'à end (end non inclus)
a[start:end]
# éléments de start jusqu'à la fin
a[start:]
# éléments du début jusqu'à end (end non inclus)
a[:end]
Astuce : en ne passant qu’un deux-points :, vous copiez la liste !
En plus de la tranche simple, il existe la valeur de pas (step) :
# de start à end (non inclus), avec un pas donné
a[start:end:step]
À quoi sert ce pas ?
Il permet d’avancer dans la liste en ne sélectionnant que les éléments selon l’intervalle choisi. Exemple :
Remarque : si vous ne précisez pas de pas, il vaut 1 par défaut. Aucun élément n’est alors sauté.
À retenir : la borne de fin n’est jamais incluse dans le résultat !
Sélectionner un élément aléatoire d’une liste
Utilisez le module random :
Si vous voulez aussi sélectionner aléatoirement via les indices, utilisez randrange du module random :
Astuce : explorez la bibliothèque random, elle vous sera très utile en Python !
3. Comment transformer des listes Python en d’autres structures
Parfois, une liste n’est pas idéale. Dans ce cas, vous voudrez la convertir vers une structure plus adaptée. Voici les transformations les plus courantes et leurs réponses.
Convertir une liste en chaîne
Utilisez ''.join(). Cette opération « colle » toutes les chaînes de la liste pour renvoyer une seule chaîne. Plus d’infos ici.
Remarque : si votre liste ne contient que des entiers, convertissez‑les en chaînes avant le join. C’est illustré dans le second exemple ci‑dessus.
La conversion en chaîne des entiers se fait en itérant sur la liste listOfNumbers. Pour en savoir plus sur l’itération d’une liste, voyez la question 12.
Convertir une liste en tuple
Utilisez la fonction tuple(). Passez‑lui votre liste et vous obtiendrez un tuple.
À retenir : les tuples sont immuables. Vous ne pourrez pas les modifier ensuite.
Astuce : essayez de transformer votre listOfStrings en tuple dans l’exercice interactif de la section suivante.
Convertir une liste en set
Un set est une collection non ordonnée d’éléments uniques. En convertissant une liste en set, vous perdez donc les doublons... et l’ordre d’origine.
Utilisez la fonction set() et passez‑lui votre liste.
Entraînez‑vous ici à convertir listOfStrings en tuple puis en set :
Convertir des listes en dictionnaire
Un dictionnaire fonctionne avec des paires clé‑valeur, la conversion est donc moins directe. Supposons une liste :
helloWorld = ['hello','world','1','2']
Il faut faire interpréter « hello » et « world » puis « 1 » et « 2 » comme des paires clé‑valeur. On les sélectionne avec la notation de tranche et on les passe à zip().
zip() fait ce qu’on attend : il associe les éléments deux à deux. En zippant helloWorld[0::2] et helloWorld[1::2], vous obtenez :
Remarque : utilisez list() pour afficher le résultat de zip().
Passez ensuite ce résultat à dict(), qui interprète hello comme clé et world comme valeur. De même pour 1 et 2.
Confirmez avec le code suivant :
Remarque : le second argument de zip() utilise un pas pour ne sélectionner que world et 2. Le premier sélectionne hello et 1.
Si votre liste est grande, vous ferez plutôt :
Remarque : un objet itérable peut fournir un itérateur. Cet itérateur, doté de .__next__, sait où il en est dans l’itération et quel est l’élément suivant.
4. Déterminer la taille d’une liste
Passez votre liste à la fonction len() pour obtenir sa longueur.
Testez ci‑dessous : nous avons déjà préparé une liste justAList.
Remarque : len() ne s’applique pas qu’aux listes, mais aussi aux autres séquences ou collections (dictionnaires, sets, chaînes, etc.). Retrouvez d’autres fonctions intégrées ici.
5. Quelle est la différence entre append() et extend() en Python ?
Repartons de la notion d’itérable évoquée en début d’article :
À retenir : une valeur est dite itérable si votre programme peut itérer dessus. Autrement dit, un itérable représente une séquence d’une ou plusieurs valeurs. Les listes sont des séquences — donc des itérables — comme tous les types séquentiels de Python.
Astuce : vérifiez qu’une variable est itérable si elle possède la méthode .__iter__, comme ci‑dessous :
Exécutez ce code et essayez d’autres exemples dans IPython !
Maintenant que la notion est claire, la différence devient simple : extend() prend un itérable (liste, set, tuple ou chaîne) et ajoute chacun de ses éléments à la liste, un par un.
append(), lui, ajoute son argument en un seul bloc à la fin de la liste. Donc, si vous lui passez un itérable, il sera ajouté comme un unique objet.
Étudiez les extraits suivants et expérimentez pour bien saisir la différence :
Vous voyez que extend() est plus efficace que d’appeler append() plusieurs fois.
6. Concaténer des listes en Python
Utilisez l’opérateur +. Il renvoie une nouvelle liste, concaténation des deux, sans modifier les originales.
Remarque : concaténer et « appender » peuvent prêter à confusion. append() diffère de +, qui ressemble à extend()… sans être identique. Avec append() et extend(), vous modifiez la liste d’origine, alors que + crée une nouvelle variable liste.
Testez et comparez avec les exemples précédents :
7. Trier une liste en Python
Deux approches simples pour trier en ordre croissant ou décroissant :
- La méthode
sort() - Ou la fonction
sorted()à laquelle vous passez une liste
sorted() s’applique à tout itérable : chaînes, sets, dictionnaires, etc.
Astuce : essayez vous‑même ! Nous avons déjà créé deux listes, rooms et orders, que vous pouvez trier avec les deux techniques :)
Remarque : la liste originale est modifiée après tri. À privilégier quand vous n’avez plus besoin de l’ordre d’origine.
8. Cloner ou copier une liste
Plusieurs méthodes :
- Trancher la liste et l’affecter à une nouvelle variable :
newList = oldList[:] - Utiliser la fonction intégrée
list():newList = list(oldList) - Utiliser le module
copy:- Méthode
copy():newList = copy.copy(oldList) - Si la liste contient des objets et que vous voulez aussi les copier, utilisez
copy.deepcopy():copy.deepcopy(oldList)
- Méthode
Essayez ci‑dessous : nous avons créé une liste groceries à copier et partager.
Remarque : avec les copies « simples », les sous‑listes pointées par plusieurs listes restent partagées. deepcopy() évite cela. Exécutez :
Si vous maîtrisez déjà bien les listes, la section suivante apporte des réponses simples à des questions plus avancées.
Et si vous vous demandez ce qu’il y a au‑delà des listes, et quels avantages des bibliothèques peuvent apporter par rapport aux listes natives, la prochaine section va vous intéresser.
Continuez la lecture !
9. Comment fonctionnent les compréhensions de listes en Python ?
En bref, c’est une façon élégante de construire des listes. Bonne nouvelle pour les matheux : la syntaxe rappelle les notations mathématiques. Jugez plutôt :
Ici, on prend les nombres de 0 à 9 (10 exclu) et on les multiplie tous par 2. Exécutez pour vérifier le résultat.
Pas compliqué. Montons d’un cran !
Faisons la même liste, mais seulement pour les nombres divisibles par 2. Facile avec une compréhension conditionnelle :
On ajoute une condition if. Si elle est vraie, le nombre est multiplié par 2. Ici, la condition est « divisible par 2 sans reste ».
De façon plus générale, vous pouvez transformer vos listes en d’autres listes — ce qui peut sembler plus abstrait.
Exemple :
Ici, vous avez déjà une liste myList que vous transformez par compréhension : pour chaque élément x de myList, on applique une opération.
Vous voyez (lambda x: x*x). Pour faire simple : une fonction lambda est une fonction anonyme, définie à l’exécution. Retenez surtout x*x.
La fonction prend un élément et le multiplie par lui‑même. Étant anonyme, on lui passe l’argument explicitement : d’où (lambda x: x*x)(x).
Autrement, on pourrait écrire :
f = lambda x: x*x
[f(x) for x in range(10)]
On définit d’abord la fonction lambda (carré de x), puis on l’applique à chaque élément.
Remarque : il existe aussi des compréhensions d’ensembles (set) et de dictionnaires.
C’est déjà pas mal, mais il y a encore beaucoup à explorer sur les compréhensions.
Continuez avec les questions suivantes pour en savoir plus sur les compréhensions imbriquées et des exemples pratiques.
10. Compter les occurrences d’un élément dans une liste
Les listes n’imposant pas l’unicité, vous voudrez parfois compter combien de fois un élément donné apparaît, voire le nombre d’occurrences de chaque élément.
Voici les deux cas :
Compter les occurrences d’un seul élément
Utilisez la méthode count() :
Compter toutes les occurrences de tous les éléments est aussi appelé « faire le tally » d’une liste (compteur global).
Compter toutes les occurrences avec count()
Combinez compréhension de liste et count() :
Ici, on convertit d’abord la liste en set pour ne garder que les éléments uniques (a et b), puis on compte pour chacun le nombre d’occurrences dans la liste d’origine.
À retenir : un set ne contient que des éléments uniques.
Compter tous les éléments avec Counter()
Alternative plus rapide : Counter() de la bibliothèque collections :
Remarque : Counter() est généralement plus rapide pour compter tous les éléments.
11. Découper une liste en blocs de taille égale
Pour découper une liste en parties de même taille, combinez zip() et iter() :
Explications :
iter()renvoie un itérateur sur une séquence.[iter(x)] * 3produit une liste de trois itérateurs surx.- Le
*devantzip()« dépaquette » la séquence en arguments, ce qui passe le même itérateur trois fois àzip(), qui tire un élément à chaque fois.
Pas clair ? Déroulons :
- Vous avez trois itérateurs, que l’on peut voir comme :
[1,2,3,4,5,6,7,8,9], [1,2,3,4,5,6,7,8,9], [1,2,3,4,5,6,7,8,9]
- Au premier passage,
zip()prend un élément séquentiellement, ce qui donne :
[1][2][3]
Remarque : les itérateurs retiennent la position courante.
- Au second passage, on ajoute :
[1, 4], [2, 5], [3, 6]
- Au dernier, même logique :
[1, 4, 7], [2, 5, 8], [3, 6, 9]
- En zippant ces trois listes, on obtient :
[1, 2, 3], [4, 5, 6], [7, 8, 9]
Pour encapsuler cette logique dans une fonction :
Votre fonction chunks() reçoit une liste et une taille de bloc, puis « yield » des tranches successives de cette taille.
La boucle range(0, len(list), chunkSize) part de 0 jusqu’à la longueur de la liste, avec un pas égal à chunkSize.
Pour chaque valeur, vous « yieldez » la tranche [i:i+chunkSize].
Exemple : à l’indice 0, vous donnez [0:2]. À l’itération suivante (pas oblige), l’indice 2 produit [2:4].
Remarque : on utilise pprint() pour un affichage lisible.
Vous pouvez aussi utiliser une compréhension de liste plutôt qu’une fonction :
12. Parcourir une liste en Python
On parcourt facilement une liste avec une boucle for. La boucle exécute une action pour chaque élément.
En Python, cela ressemble à :
Vous avez une liste mylist, et vous demandez à Python d’imprimer les sous‑listes de longueur 3. Ici, ce seront [1,2,3] et [8, 9,10].
Remarque : x peut s’appeler element, listElement, etc. Essayez dans la console.
Vous ne voyez pas les indices dans ce résultat. Pour itérer avec les indices, faites :
Ici, enumerate(myList) renvoie un couple (indice, valeur). On récupère donc i, val dans la boucle.
Remarque : vous pouvez aussi utiliser une compréhension de liste pour boucler. L’affichage est immédiat sans passer par print() :
13. Aplatir une liste de listes
Pour produire une liste simple à partir d’une liste de listes, vous pouvez utiliser sum(). Pensez à passer la liste et une liste vide comme point de départ :
Deux autres approches :
- Utiliser
reduce()avec une lambda.reduce()agrège l’itérable en une valeur, selon la fonction fournie. Ici, on concatène cumulativement :[1,2]+[3,4], puis ce résultat +[5,6]. Visuellement :
([1,2]+[3,4])+[5,6]
À retenir : l’opérateur + concatène les listes.
- Autre option : une compréhension de liste imbriquée. On parcourt chaque
sublistpuis chaqueitemde cette sous‑liste pour l’extraire.
On peut la réécrire avec des boucles for classiques :
list1 = []
for sublist in list:
for item in sublist:
list1.append(item)
14. Obtenir l’intersection de deux listes Python
Intersection avec compréhension de liste
Pour obtenir l’intersection, vous pouvez utiliser filter().
Illustration ci‑dessous. Nous avons défini list1 et list2. Utilisez le shell IPython pour inspecter leur contenu.
Ici, filter() prend chaque élément de sous‑liste et vérifie s’il est dans la liste source list1. La compréhension de liste s’exécute pour chaque sous‑liste de list2.
Remarque : filter() renvoie un itérable, pas une liste ; entourez‑le de list() pour voir le résultat. Essayez sans list() pour comparer.
Pour plus de lisibilité, vous pouvez recourir à des compréhensions imbriquées :
Intersection avec set()
Si l’ordre n’a pas d’importance et que les doublons ne posent pas de problème, utilisez l’intersection d’ensembles :
Dans le premier exemple, on convertit les deux listes en sets, on les intersecte, puis on reconvertit en liste. L’ordre final est arbitraire. On peut aussi ne convertir qu’une (la plus grande), puis appeler intersection() avec tout itérable.
Remarque : pour que cela fonctionne, vos listes ne doivent pas contenir d’autres listes. C’est pourquoi list2 est différente. Affichez‑la pour vérifier.
15. Supprimer les doublons d’une liste Python
Comme indiqué plus haut, si vous voulez une collection d’éléments uniques et non ordonnée, utilisez un set.
Pour créer un set à partir de n’importe quel itérable, passez‑le à set(). Pour revenir ensuite à une liste, passez le set à list().
À retenir : un itérable peut être une liste, un dictionnaire, etc. Vérifiez qu’une variable est itérable avec .__iter__.
Exemple clair de suppression de doublons avec set() :
Comme on le voit dans le dernier résultat, l’ordre d’origine n’est pas conservé après soustraction de smallNumbers. Les sets étant non ordonnés, tout ordre est perdu. La conversion retour en liste crée un ordre arbitraire.
Si l’ordre compte, il faudra une autre approche. Cette page détaille le sujet.
16. Pourquoi utiliser NumPy plutôt que des listes Python ?
Quatre raisons principales reviennent chez les programmeurs Python :
- les tableaux NumPy sont plus compacts que des listes,
- l’accès (lecture/écriture) y est plus rapide,
- NumPy est souvent plus pratique grâce aux nombreuses opérations vectorielles et matricielles disponibles,
- et il est plus efficace car implémenté de façon optimisée.
17. Créer des tableaux NumPy vides
Pour créer un tableau NumPy vide :
Pour initialiser un tableau, plusieurs options :
Consultez cette documentation pour d’autres moyens d’initialiser un tableau NumPy.
18. Faire des calculs avec des listes en Python
Très souvent, au‑delà du stockage, on réalise des opérations mathématiques sur les listes. Voici les questions les plus fréquentes à ce sujet.
Calculer une moyenne pondérée
La moyenne pondérée est proche de la moyenne simple, mais prend en compte une valeur et son poids.
Exemple :
cost = [0.424, 0.4221, 0.4185, 0.4132, 0.413]
cases = [10, 20, 30, 40, 50]
Calculez la moyenne pondérée ainsi :
Ou avec ces alternatives :
Ou encore :
Enfin, vous pouvez utiliser zip().
Astuce : créez une variable costAndCases à laquelle vous assignez zip() avec cost et cases. Vous verrez une liste de tuples : la première valeur est le coût, la seconde le nombre de cas achetés à ce prix.
À retenir : zip() associe deux listes élément par élément. Par exemple, zip(cost, cases) donne [(0.424, 10), (0.4221, 20), (0.4185, 30), (0.4132, 40), (0.413, 50)].
Calculer un quantile en Python
Les quantiles sont essentiels pour résumer un jeu de données, aux côtés des valeurs min et max. On parle souvent des 25e, 50e et 75e percentiles (1er quartile, médiane, 3e quartile).
Au total, cinq nombres suffisent pour résumer un jeu de données : minimum, maximum, médiane et deux quartiles.
Min et max sont faciles à trouver. Quid des percentiles ?
Simple : supposons 25 observations triées du plus petit au plus grand :
- Le 25e percentile (Q1) : 0,25 × 25 = 6,25 → 7e observation (en arrondissant).
- Le 75e percentile (Q3) : 0,75 × 25 = 18,75 → 19e observation.
- La médiane : 0,5 × 25 = 12,5 → 13e observation.
Comment le coder ?
Le plus simple est d’utiliser NumPy. Suivez les indications ci‑dessous pour calculer les percentiles de votre liste :
Sommer deux listes élément par élément
Supposons :
list1=[1, 2, 3]
list2=[4, 5, 6]
Vous voulez additionner 1+4, 2+5, 3+6. Deux façons :
À suivre !
… En Python « pur »
Utilisez map avec operator.add :
Résultat : [5, 7, 9].
Remarque : utilisez list() pour afficher le résultat de map().
Ou zip() avec une compréhension :
… Avec NumPy
Sur de plus grands volumes, préférez numpy.
Importez la bibliothèque et convertissez les listes en tableaux NumPy :
Et ensuite dans votre parcours Data Science avec Python ?
Vous avez terminé ce tutoriel interactif sur les listes. C’était dense, mais vous y êtes arrivé !
Les listes ne sont qu’une brique essentielle. Il y a tant à explorer ! Notre cours Intro to Python for Data Science est parfait pour approfondir et découvrir comment Python est utilisé en data science : des bases jusqu’à une introduction à NumPy. Idéal pour les débutants !
Si vous êtes déjà plus avancé, jetez un œil à notre cours Intermediate Python For Data Science, conçu pour passer au niveau supérieur. Il aborde d’autres bibliothèques (matplotlib, pandas), des concepts comme la logique, le contrôle de flux, et inclut une étude de cas pour consolider vos acquis.
Vous utilisez déjà Python pour la data science et voulez aller plus loin ? Intéressez‑vous à notre cours Importing Data Into Python ou lisez notre série de tutoriels sur l’importance du prétraitement dans le pipeline de machine learning !
