Files
training.python.datascience/documentation/01.7-pandas-files.md
Steve Kossouho d06fd5414d Rename documentation files
Removed new- prefix.
Added old- prefix to old files.
2025-07-12 17:03:38 +02:00

223 lines
7.7 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: Pandas
author: Steve Kossouho
---
# Manipuler des fichiers
----
## Charger un fichier
Si le principal intérêt de Pandas est de manipuler des données pour en extraire des informations, cela
se fait difficilement sans outils intégrés pour charger des sources de données généralistes.
Pandas est capable de lire et de convertir en `DataFrame`{.python} des données provenant de sources dans
des formats tels que [CSV]{.naming}, [JSON]{.naming}, [XLSX]{.naming}, [SAS]{.naming} ou encore des requêtes [SQL]{.naming}.
----
### Fichiers CSV
La fonction de chargement de documents CSV de Pandas se nomme simplement `pandas.read_csv()`{.python}.
Cette fonction est capable de renvoyer un `DataFrame`{.python} depuis un document, dont le chemin peut être :
1. Un chemin de fichier local, absolu ou relatif;
2. une URL utilisant le protocole HTTP, HTTPS, FTP ou S3.
```python {.numberLines}
import pandas as pd
data = pd.read_csv("https://sub.domain.tld/resource-path.csv")
```
La fonction propose de nombreux _arguments avec valeur par défaut_ pour personnaliser le chargement du
document. Il est ainsi possible de personnaliser l'encodage, la détection d'en-tête, ou encore demander à
interpréter spécifiquement le contenu de colonnes de type date ou de type numérique.
[Documentation de `read_csv`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html)
----
### Fichiers Excel
Les documents [Open Document (ODS)]{.naming} et [Excel]{.naming} possèdent plusieurs
différences notables avec les documents [CSV]{.naming} :
1. Ils contiennent potentiellement plusieurs feuilles de calcul;
2. ils possèdent des informations sur le type ([format]{.naming}) des cellules.
Vous pouvez ainsi charger plusieurs `DataFrame`{.python} depuis un seul document de tableur,
ou choisir une feuille de calcul à charger. Également, vous n'avez normalement pas à préciser
d'arguments pour interpréter correctement des dates; l'information est présente dans le document.
[Documentation de `read_excel`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_excel.html)
```python {.numberLines}
import pandas as pd
data: pd.DataFrame = pd.read_excel("https://sub.domain.tld/resource-path.csv", sheet_name="Sheet1")
sheets: dict[str, pd.DataFrame] = pd.read_excel("https://sub.domain.tld/resource-path.csv", sheet_name=None)
```
----
#### Bibliothèques tableur
Selon le type de document à charger, par défaut, Pandas aura besoin d'une bibliothèque
supplémentaire pour interpréter le contenu du document.
| Type de document | Bibliothèque à installer |
|------------------|-------------------------------|
| `.odf` | `pip install odfpy`{.bash} |
| `.xls` | `pip install xlrd`{.bash} |
| `.xlsb` | `pip install pyxlsb`{.bash} |
| `.xlsx` | `pip install openpyxl`{.bash} |
----
### Requête SQL
Bien que le SQL puisse être utilisé seul pour de l'analyse de données, charger le
résultat d'une requête SQL dans un `DataFrame`{.python} peut être utile pour
effectuer des calculs spécifiques avec Pandas, ou encore générer facilement des
graphiques.
Pandas propose deux fonctions pour charger du contenu SQL :
1. `def read_sql_table(table: str, connection, ...)`{.python}
2. `def read_sql_query(sql: str, connection, ...)`{.python}
- [Documentation de `read_sql_table`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_sql_table.html)
- [Documentation de `read_sql_query`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_sql_query.html)
----
Ces deux fonctions nécessitent un objet de connexion à une base, qui peut
provenir de deux bibliothèques uniquement :
| Base de données | Bibliothèque à utiliser |
|----------------------|---------------------------|
| SQLite3 | `sqlite3` ou `sqlalchemy` |
| MySQL / MariaDB | `sqlalchemy` |
| PostgreSQL | `sqlalchemy` |
| Oracle | `sqlalchemy` |
| Microsoft SQL Server | `sqlalchemy` |
----
#### SQLAlchemy
[SQLAlchemy](https://www.sqlalchemy.org/) est une bibliothèque qu'on appelle communément
un [ORM]{.naming}. C'est une abstraction objet qui permet de converser avec des moteurs de
base de données SQL uniquement avec des classes et des méthodes Python.
Pandas est capable d'utiliser des objets de connexion de la bibliothèque SQLAlchemy pour
envoyer des commandes brutes SQL.
```python {.numberLines}
import pandas as pd
from sqlalchemy import create_engine
# L'URL dépend du moteur à utiliser.
engine = create_engine("sqlite:///home/user/path/file.db")
with engine.connect() as connection:
data = pd.read_sql_table("<table_name>", connection)
```
----
#### SQLite3
La bibliothèque SQLite3 fournie avec les distributions classiques de Python, est
une bibliothèque [DBAPI 2.0]{.naming} uniquement compatible avec le moteur de bases
de données embarquées SQLite 3.
Pandas accepte les objets de connexion de la bibliothèque pour envoyer des commandes
SQL.
```python {.numberLines}
import pandas as pd
import sqlite3
connection = sqlite3.connect("/home/user/path/file.db")
data = pd.read_sql_query("SELECT * FROM table WHERE column = 1", connection)
connection.close()
```
----
### SAS
Les fichiers de [datasets]{.naming} produits par la solution commerciale propriétaire SAS
sont lisibles par Pandas. Le type des colonnes récupérées correspond normalement à ce qui
aura été défini dans le document.
```python {.numberLines}
import pandas as pd
data = pd.read_sas("/path/to/file.sas7bdat")
```
----
### Parquet
Le format [Parquet]{.naming} est un format de fichier en colonnes optimisé pour une utilisation avec des systèmes de
traitement de données à grande échelle comme Hadoop. Il est spécialement conçu pour fonctionner avec la bibliothèque
Apache Arrow et fournit des performances exceptionnelles pour des ensembles de données de grande taille.
Pour charger un DataFrame depuis un fichier Parquet, vous pouvez utiliser la fonction `pandas.read_parquet()`{.python}.
Cette fonction renvoie un objet `DataFrame` à partir d'une source de fichier Parquet.
La source peut être un chemin de fichier local, absolu ou relatif ou une URL utilisant le protocole HTTP, FTP ou S3.
Assurez-vous d'abord d'installer le paquet nécessaire pour lire les fichiers Parquet :
```bash {.numberLines}
pip install pyarrow # ou pip install fastparquet
```
----
Voici un exemple de code pour charger un DataFrame à partir d'un fichier Parquet :
```python {.numberLines}
import pandas as pd
# Charger un DataFrame depuis un fichier Parquet
df = pd.read_parquet('/path/to/fichier.parquet')
```
Notez que si votre fichier Parquet est compressé (par exemple avec Snappy, Gzip ou Brotli),
Pandas sera en mesure de le décompresser automatiquement lors de la lecture.
----
## Sauvegarder pour Excel
Enregistrer un fichier Excel depuis les données d'un `DataFrame` est extrêmement simple;
chaque `DataFrame`{.python} possède des méthodes de sérialisation telles que
`.to_excel()`{.python}
```python {.numberLines}
import pandas as pd
# Créer un dataframe simple
df = pd.DataFrame(data={"A": [1, 2], "B": ["Bonjour", "Hello"]})
# Enregistrer le fichier avec les données du DataFrame
df.to_excel("nom du fichier.xlsx")
```
Le fichier possèdera un style de tableur de base, qui ne semble à l'heure actuelle actuelle pas
très configurable.
----
## Exemples de ressources fichier
- [Fichiers au format Parquet](https://github.com/Teradata/kylo/tree/master/samples/sample-data/parquet)
- [Fichiers au format CSV](https://www.datablist.com/learn/csv/download-sample-csv-files)
- [Fichiers au format Excel 2007+](https://file-examples.com/index.php/sample-documents-download/sample-xls-download/)