7.7 KiB
title, author
title | author |
---|---|
Pandas | 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 :
- Un chemin de fichier local, absolu ou relatif;
- une URL utilisant le protocole HTTP, HTTPS, FTP ou S3.
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.
Fichiers Excel
Les documents [Open Document (ODS)]{.naming} et [Excel]{.naming} possèdent plusieurs différences notables avec les documents [CSV]{.naming} :
- Ils contiennent potentiellement plusieurs feuilles de calcul;
- 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.
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 :
def read_sql_table(table: str, connection, ...)
{.python}def read_sql_query(sql: str, connection, ...)
{.python}
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 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.
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.
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.
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 :
pip install pyarrow # ou pip install fastparquet
Voici un exemple de code pour charger un DataFrame à partir d'un fichier Parquet :
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}
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.