--- title: Pandas author: Steve Kossouho --- # Concepts de base de Pandas ---- ## La bibliothèque Pandas Il existe d'assez nombreuses bibliothèques Python destinées à faciliter le traitement de données. Bien que la bascule prenne du temps, de plus en plus de développeurs et d'entreprises optent pour inclure ces bibliothèques dans leur flux de travail, bien souvent en remplacement de solutions payantes telles que **SAS**, **Stata** ou **MatLab**. Parmi ces bibliothèques, on compte notamment `pyspark` (`Apache Spark`), `pandas`, `polars` ou encore `dask`. `pandas`, la plus connue d'entre elles, est une bibliothèque assez intuitive, destinée à des développeurs, et pensée pour des développeurs qui sont déjà habitués à traiter de la donnée dans des logiciels propriétaires. ![_Logo de Pandas_](assets/images/logo-pandas.png){width=96px} ---- ### Installer `pandas` Pour bénéficier de la meilleure expérience avec Pandas, vous pouvez l'installer avec l'outil `pip` : ```bash {.numberLines} # Pandas-stubs offre l'autocomplétion sur des éléments dynamiques # Openpyxl permet à pandas de charger des documents Excel 2003- et 2007+ pip install pandas pandas-stubs openpyxl ``` ---- ## Types de base de Pandas Toute l'utilisation de la bibliothèque `Pandas` tourne autour de 3 classes principales permettant de manipuler des données en 1D ou en 2D. - `Series` : Séries de données (1 dimension) - `DataFrame` : Tableaux de données (2 dimensions) - `Index` : Séries de données identifiant des colonnes ou lignes [Guide utilisateur Pandas] ---- ### Les objets `Series` La classe `Series` est la plus simple à manipuler. Elle stocke et permet de gérer les données d'un tableau à une dimension. ```python {.numberLines} import pandas as pd series = pd.Series([0, 1, 1, 2, 3, 5, 8, 13, 21]) ``` [pandas.Series] ---- ### Les objets `DataFrame` La classe `DataFrame` permet de stocker et de manipuler des données dans un tableau à deux dimensions. Cette classe est séparée de la classe `Series`, au moins parce que les objets `DataFrame` possèdent deux index, au lieu d'un seul pour une `Series` (nous allons le découvrir plus tard). ```python {.numberLines} import pandas as pd dataframe = pd.DataFrame(data=[["Paul", 1974], ["Quentin", 1991], ["Aude", 1987]]) ``` [pandas.DataFrame] ---- ### Les objets `Index` La classe `Index` est similaire à un objet de la classe `Series`. C'est une séquence de valeurs, qui est utilisée par Pandas pour étiqueter des colonnes d'un `DataFrame`, ou des enregistrements d'une `Series` ou d'un `DataFrame`. Tout objet `Series` ou `DataFrame` possède toujours un index par axe. ```python {.numberLines} import pandas as pd index = pd.Index(data=[1, 2, 3]) ``` [pandas.Index] ---- ### Alternatif : Les objets `MultiIndex` Un objet `MultiIndex` est un `Index` dont les étiquettes sont composées sur plusieurs niveaux. Cela permet d'extraire des lignes ou des colonnes hiérarchiquement. ```python {.numberLines} import pandas as pd index = pd.MultiIndex.from_tuples([("FR", "Paris"), ("FR", "Pau"), ("ES", "Madrid"), ("ES", "Sevilla")]) series = pd.Series(data=[1, 2, 3, 4], index=index) print(series.loc["FR"]) ``` [Indexation avancée] ---- ### Alternatif : Les objets `DatetimeIndex` Un objet `DatetimeIndex` est un `Index` contenant des objets de type date, et dont le contenu est générable de façon déterministe. Ils contiennent généralement des dates à intervalles réguliers, ou des dates suivant des règles simples (ex. tous les 4 mercredi, toutes les fins de mois etc.) [Indexation avancée] ---- ### Structure d'une `Series` ![Series](assets%2Fimages%2Fstructures-series-shape.png) ---- ### Structure d'un `DataFrame` ![DataFrame](assets%2Fimages%2Fstructures-dataframe-shape.png) [Guide utilisateur Pandas]: https://pandas.pydata.org/docs/user_guide/index.html#user-guide Pandas user guide [pandas.Series]: https://pandas.pydata.org/docs/reference/series.html [pandas.DataFrame]: https://pandas.pydata.org/docs/reference/frame.html [pandas.Index]: https://pandas.pydata.org/docs/reference/indexing.html [pandas.MultiIndex]: https://pandas.pydata.org/docs/user_guide/advanced.html [Indexation avancée]: https://pandas.pydata.org/docs/user_guide/advanced.html