OUJOOD.COM
Contrôler les types de colonnes à la lecture
Par défaut, Pandas infère le type de chaque colonne en lisant le fichier. La plupart du temps, ça marche. Mais l'inférence automatique a ses limites : un code postal comme 01200 sera interprété comme l'entier 1200, perdant le zéro initial. Un identifiant numérique sera converti en float64 si une seule cellule est vide.
Le paramètre dtype règle ces cas en forçant le type avant même que les données entrent dans le DataFrame :
import pandas as pd # Forcer les types pour éviter les conversions automatiques indésirables df = pd.read_csv( "clients.csv", dtype={ "code_postal": str, # garde le zéro initial "téléphone": str, # traité comme texte, pas comme nombre "id_client": "int32", # entier 32 bits (moins lourd que int64) "actif": bool # True/False } ) print(df.dtypes)
Forcer str sur une colonne numérique évite toute transformation. C'est le réflexe à avoir pour les codes postaux, numéros de téléphone, numéros de sécurité sociale — tout identifiant qui ressemble à un nombre mais ne doit pas être calculé.
Parser les dates automatiquement
Pandas lit les colonnes de dates comme du texte (object) par défaut. Pour les convertir en type datetime64 dès la lecture, utilisez parse_dates avec la liste des colonnes concernées. Cela vous évite un pd.to_datetime() manuel après coup.
import pandas as pd
df = pd.read_csv(
"commandes.csv",
parse_dates=["date_commande", "date_livraison"]
)
print(df.dtypes)
# date_commande datetime64[ns]
# date_livraison datetime64[ns]
# Une fois en datetime, vous pouvez faire des calculs de durée
df["délai_jours"] = (df["date_livraison"] - df["date_commande"]).dt.days
print(df[["date_commande", "date_livraison", "délai_jours"]].head())
Quand les colonnes sont en datetime64, Pandas débloque toute une suite d'opérations : extraire l'année (.dt.year), le mois (.dt.month), le jour de la semaine (.dt.day_name()), calculer des délais, filtrer par période. Rien de tout ça n'est possible si la date reste une chaîne de caractères.
Lire un CSV depuis une URL
pd.read_csv() accepte directement une URL à la place d'un chemin local. C'est utile pour charger des données publiques — jeux de données gouvernementaux, datasets GitHub, APIs qui exposent du CSV — sans télécharger le fichier manuellement.
import pandas as pd
# Lire directement depuis une URL publique
url = "https://raw.githubusercontent.com/datasets/population/main/data/population.csv"
df = pd.read_csv(url)
print(df.head())
print(df.shape)
Pandas télécharge le fichier en mémoire sans l'enregistrer sur disque. Si l'URL nécessite des en-têtes HTTP (token d'authentification, user-agent), vous devrez passer par requests pour récupérer le contenu puis l'envoyer à Pandas via io.StringIO.
Lire un gros fichier CSV par morceaux
Un fichier de plusieurs gigaoctets ne peut pas toujours tenir entièrement en RAM. Le paramètre chunksize transforme read_csv() en itérateur : il retourne successivement des morceaux de N lignes que vous traitez un par un.
import pandas as pd # Traitement par morceaux de 10 000 lignes total_ventes = 0 for chunk in pd.read_csv("transactions.csv", chunksize=10_000): # Chaque 'chunk' est un DataFrame de 10 000 lignes max total_ventes += chunk["montant"].sum() print(f"Total des ventes : {total_ventes:.2f} €") # Variante : filtrer et accumuler les lignes qui nous intéressent morceaux = [] for chunk in pd.read_csv("transactions.csv", chunksize=10_000): morceaux.append(chunk[chunk["statut"] == "validée"]) df_valide = pd.concat(morceaux, ignore_index=True) print(df_valide.shape)
Le traitement par chunks est une technique fondamentale pour les pipelines de données en production. Vous calculez ou filtrez à la volée sans jamais charger plus de 10 000 lignes en mémoire à la fois. La mémoire consommée reste constante quelle que soit la taille du fichier.
Pour les fichiers modérément volumineux (quelques centaines de Mo), une alternative est de ne charger que les colonnes nécessaires avec usecols — souvent suffisant avant d'avoir besoin du chunking.
Par carabde | Mis à jour le 26 avril 2026