alltools.one
Data‱
2025-07-01
‱
8 min
‱
alltools.one Team
CSVData CleaningData AnalysisETLPython

Conseils de Nettoyage de Données CSV pour Analystes et Développeurs

Les fichiers CSV sont le format d'Ă©change universel pour les donnĂ©es tabulaires. Ils sont simples, lisibles par l'humain et supportĂ©s par tous les outils, d'Excel Ă  pandas. Mais les fichiers CSV du monde rĂ©el sont souvent dĂ©sordonnĂ©s — encodages incohĂ©rents, valeurs manquantes, types de donnĂ©es mixtes et lignes malformĂ©es. Ce guide couvre les techniques pratiques pour nettoyer les donnĂ©es CSV de maniĂšre fiable.

ProblĂšmes Courants des CSV

1. ProblĂšmes d'Encodage

Le problÚme de CSV le plus frustrant est l'encodage. Un fichier créé sous Windows dans Excel pourrait utiliser windows-1252, tandis que votre script Python attend utf-8.

SymptÎmes : CaractÚres illisibles (mojibake) comme é au lieu de é, ou des exceptions UnicodeDecodeError.

Détection :

import chardet

with open('data.csv', 'rb') as f:
    result = chardet.detect(f.read(10000))
    print(result)  # {'encoding': 'Windows-1252', 'confidence': 0.73}

Correction : Lisez avec l'encodage détecté, puis sauvegardez en UTF-8 :

import pandas as pd

df = pd.read_csv('data.csv', encoding='windows-1252')
df.to_csv('data_clean.csv', encoding='utf-8', index=False)

2. Délimiteurs Incohérents

Tous les « CSV » n'utilisent pas des virgules. Les fichiers CSV européens utilisent souvent des points-virgules car les virgules sont des séparateurs décimaux dans de nombreuses langues européennes.

# Auto-détection du délimiteur
import csv

with open('data.csv', 'r') as f:
    dialect = csv.Sniffer().sniff(f.read(5000))
    print(f"Délimiteur : {repr(dialect.delimiter)}")

Notre Éditeur CSV gĂšre automatiquement la dĂ©tection des dĂ©limiteurs — collez vos donnĂ©es et il identifie le format.

3. Valeurs Manquantes

Les données manquantes apparaissent sous de nombreuses formes : cellules vides, NA, N/A, null, -, ou simplement des espaces.

# Standardiser toutes les représentations de valeurs manquantes
df = pd.read_csv('data.csv', na_values=['NA', 'N/A', 'null', '-', '', ' '])

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

# Stratégie 1 : Supprimer les lignes avec des champs critiques manquants
df = df.dropna(subset=['email', 'name'])

# Stratégie 2 : Remplir avec des valeurs par défaut
df['country'] = df['country'].fillna('Unknown')

# Stratégie 3 : Remplissage vers l'avant (séries temporelles)
df['price'] = df['price'].ffill()

4. Lignes Dupliquées

Les doublons exacts sont faciles Ă  trouver. Les doublons approximatifs (mĂȘme personne avec une orthographe lĂ©gĂšrement diffĂ©rente du nom) sont plus difficiles.

# Trouver les doublons exacts
duplicates = df[df.duplicated(keep=False)]
print(f"{len(duplicates)} lignes dupliquées trouvées")

# Supprimer les doublons, en gardant la premiĂšre occurrence
df = df.drop_duplicates()

# Supprimer les doublons basés sur des colonnes spécifiques
df = df.drop_duplicates(subset=['email'], keep='last')

5. Formats de Données Incohérents

Dates en formats mixtes, numéros de téléphone avec et sans indicatif pays, capitalisation incohérente :

# Standardiser les dates
df['date'] = pd.to_datetime(df['date'], format='mixed', dayfirst=False)

# Standardiser les champs texte
df['name'] = df['name'].str.strip().str.title()
df['email'] = df['email'].str.strip().str.lower()

# Standardiser les numéros de téléphone (basique)
df['phone'] = df['phone'].str.replace(r'[^0-9+]', '', regex=True)

6. ProblÚmes de Types de Données

CSV stocke tout sous forme de texte. Les nombres avec des zéros initiaux, les codes postaux et les numéros de téléphone peuvent perdre leur formatage lors de l'analyse :

# Préserver les zéros initiaux dans les codes postaux
df = pd.read_csv('data.csv', dtype={'zip_code': str, 'phone': str})

# Convertir les chaßnes monétaires en nombres
df['price'] = df['price'].str.replace('$', '').str.replace(',', '').astype(float)

Validation AprĂšs Nettoyage

Validez toujours vos données nettoyées :

# Vérifier le nombre de lignes (avons-nous perdu ou gagné des lignes de maniÚre inattendue ?)
print(f"Lignes : {len(df)}")

# Vérifier les types de données
print(df.dtypes)

# Vérifier les plages de valeurs
print(df.describe())

# Vérifier les nulls restants
print(df.isnull().sum())

# Valider les contraintes d'unicité
assert df['email'].is_unique, "Emails dupliqués trouvés !"

Outils en Ligne de Commande

Pour un nettoyage rapide sans écrire de code :

# Convertir l'encodage
iconv -f WINDOWS-1252 -t UTF-8 input.csv > output.csv

# Trier et supprimer les lignes dupliquées
sort -u input.csv > output.csv

# Extraire des colonnes spécifiques (cut)
cut -d',' -f1,3,5 input.csv > output.csv

# Filtrer les lignes (awk)
awk -F',' '$3 > 100' input.csv > filtered.csv

Pour des transformations plus complexes, des outils comme csvkit fournissent une suite complĂšte d'utilitaires CSV :

# Installer
pip install csvkit

# Voir les noms de colonnes
csvcut -n data.csv

# Filtrer les lignes
csvgrep -c country -m "USA" data.csv > usa_only.csv

# Convertir en JSON
csvjson data.csv > data.json

Vous souhaitez convertir entre CSV et JSON ? Notre convertisseur CSV vers JSON gÚre cela instantanément.

FAQ

Quelle est la taille maximale de fichier pour le traitement CSV ?

Il n'y a pas de limite inhérente dans le format CSV. La limite pratique dépend de vos outils : Excel gÚre environ 1 million de lignes, pandas fonctionne bien jusqu'à plusieurs Go avec suffisamment de RAM, et des outils comme Dask ou Polars gÚrent des ensembles de données plus grands que la mémoire. Pour les outils dans le navigateur, notre éditeur CSV gÚre des fichiers jusqu'à 100 Mo.

Dois-je utiliser CSV ou JSON pour l'échange de données ?

CSV est idéal pour les données tabulaires plates (feuilles de calcul, exports de bases de données, listes simples). JSON est meilleur pour les données imbriquées et hiérarchiques (réponses API, configuration, documents à structure variable). Pour une comparaison détaillée, consultez notre guide CSV vs JSON vs XML.

Ressources Connexes

Published on 2025-07-01
CSV Data Cleaning Tips for Analysts and Developers | alltools.one