logo oujood
🔍

Créer un DataFrame depuis un CSV

La fonction read_csv() de Pandas est l'une des plus utilisées en data science. Elle charge un fichier CSV en DataFrame en une seule ligne — mais elle propose aussi des dizaines d'options pour gérer les cas réels.

OUJOOD.COM

Pourquoi lire un CSV plutôt que saisir les données à la main ?

Dans la pratique, vous ne construirez presque jamais un DataFrame ligne par ligne. Les données viennent de fichiers — et le CSV est le format le plus répandu : exports de bases de données, résultats d'enquêtes, données publiques, rapports financiers. Savoir lire un CSV correctement, c'est la compétence numéro un pour travailler avec des données réelles.

Pandas fournit pd.read_csv() pour ça. La version minimale tient en une ligne. Mais les fichiers réels ont souvent des particularités : séparateur point-virgule, encodage spécial, lignes d'en-tête décalées, colonnes inutiles. Cette page couvre les options que vous rencontrerez régulièrement.

Lecture de base d'un fichier CSV

Supposons un fichier ventes.csv dans le même dossier que votre script, avec ce contenu :

  📋 Copier le code

produit,catégorie,quantité,prix_unitaire
Clavier,Informatique,12,45.90
Souris,Informatique,30,22.50
Bureau,Mobilier,5,189.00
Lampe,Mobilier,18,34.99

Pour le charger en DataFrame :

  📋 Copier le code

import pandas as pd

# Lecture minimale : Pandas détecte la virgule comme séparateur
df = pd.read_csv("ventes.csv")
print(df)
print(df.shape)   # (4, 4)

Pandas utilise la première ligne comme en-tête de colonnes par défaut. L'index numérique (0, 1, 2...) est créé automatiquement. Le type de chaque colonne est inféré : object pour le texte, int64 pour les entiers, float64 pour les décimaux.

Gérer le séparateur et l'encodage

Les fichiers CSV produits en France utilisent souvent le point-virgule comme séparateur (pour ne pas confondre avec la virgule décimale) et l'encodage latin-1 ou cp1252. Si vous lisez un tel fichier sans préciser ces options, vous obtiendrez des colonnes mal découpées ou des caractères illisibles.

  📋 Copier le code

import pandas as pd

# Fichier avec point-virgule et encodage Windows courant
df = pd.read_csv(
    "ventes_france.csv",
    sep=";",
    encoding="latin-1"
)
print(df.head())

# Autre encodage fréquent sous Windows :
df2 = pd.read_csv("rapport.csv", sep=";", encoding="cp1252")

Si vous ne savez pas quel encodage utilise votre fichier, essayez d'abord utf-8, puis latin-1. La bibliothèque chardet peut aussi détecter l'encodage automatiquement si les deux premiers échouent.

Choisir les colonnes à charger et définir l'index

Un fichier CSV peut contenir des dizaines de colonnes dont vous n'avez besoin que d'une partie. Le paramètre usecols évite de charger inutilement des données en mémoire. Et si une colonne contient des identifiants uniques, index_col en fait directement l'index du DataFrame.

  📋 Copier le code

import pandas as pd

# Charger seulement certaines colonnes
df = pd.read_csv(
    "ventes.csv",
    usecols=["produit", "quantité", "prix_unitaire"]
)
print(df)

# Utiliser la colonne "produit" comme index
df2 = pd.read_csv(
    "ventes.csv",
    index_col="produit"
)
print(df2.loc["Clavier"])

Avec index_col="produit", la colonne produit disparaît des colonnes et devient l'index du DataFrame. Vous pouvez ensuite accéder à n'importe quelle ligne par son nom de produit avec df.loc["Clavier"].

Gérer les valeurs manquantes et les lignes à ignorer

Les fichiers réels sont rarement propres. Certaines cellules sont vides, certaines lignes sont des commentaires ou des totaux en bas de fichier. Pandas propose des paramètres dédiés pour traiter ces cas à la lecture, avant même que les données entrent dans le DataFrame.

  📋 Copier le code

import pandas as pd

df = pd.read_csv(
    "rapport.csv",
    sep=";",
    encoding="utf-8",
    skiprows=2,          # ignorer les 2 premières lignes (ex: titre du rapport)
    skipfooter=1,        # ignorer la dernière ligne (ex: ligne "Total")
    na_values=["N/A", "-", ""],  # valeurs à interpréter comme NaN
    engine="python"      # requis quand skipfooter est utilisé
)

# Vérifier combien de valeurs manquantes par colonne
print(df.isnull().sum())

skiprows=2 saute les deux premières lignes avant de chercher l'en-tête. skipfooter=1 ignore la dernière ligne du fichier. na_values étend la liste des valeurs que Pandas considère comme manquantes — par défaut il reconnaît déjà NaN, NULL, none et quelques autres, mais pas forcément le tiret ou les chaînes personnalisées de votre fichier.

Pour les fichiers volumineux, ajoutez nrows=1000 pour ne charger que les 1000 premières lignes — pratique pour explorer la structure d'un gros fichier sans tout mettre en mémoire.

Par carabde | Mis à jour le 26 avril 2026