Comment filtrer les lignes CSV invalides

PythonPythonBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

En science des données et en programmation, la manipulation de fichiers CSV nécessite souvent des techniques robustes pour filtrer et nettoyer les lignes invalides. Ce tutoriel explore les méthodes Python pour détecter et supprimer les entrées de données problématiques, afin d'assurer des ensembles de données de haute qualité pour les analyses et les applications d'apprentissage automatique.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python(("Python")) -.-> python/FileHandlingGroup(["File Handling"]) python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python/ModulesandPackagesGroup -.-> python/standard_libraries("Common Standard Libraries") python/FileHandlingGroup -.-> python/file_reading_writing("Reading and Writing Files") python/FileHandlingGroup -.-> python/file_operations("File Operations") python/PythonStandardLibraryGroup -.-> python/data_collections("Data Collections") python/PythonStandardLibraryGroup -.-> python/data_serialization("Data Serialization") subgraph Lab Skills python/standard_libraries -.-> lab-437979{{"Comment filtrer les lignes CSV invalides"}} python/file_reading_writing -.-> lab-437979{{"Comment filtrer les lignes CSV invalides"}} python/file_operations -.-> lab-437979{{"Comment filtrer les lignes CSV invalides"}} python/data_collections -.-> lab-437979{{"Comment filtrer les lignes CSV invalides"}} python/data_serialization -.-> lab-437979{{"Comment filtrer les lignes CSV invalides"}} end

CSV Data Basics

Qu'est-ce qu'un CSV ?

CSV (Comma-Separated Values, Valeurs séparées par des virgules) est un format de fichier simple et largement utilisé pour stocker des données tabulaires. Chaque ligne dans un fichier CSV représente une ligne de données, les valeurs individuelles étant séparées par des virgules. Ce format est populaire en raison de sa simplicité et de sa compatibilité avec divers outils de traitement de données.

Structure d'un fichier CSV

Un fichier CSV typique ressemble à ceci :

name,age,city
John Doe,30,New York
Alice Smith,25,San Francisco
Bob Johnson,35,Chicago

Caractéristiques clés

  • Format texte brut
  • Virgule comme séparateur par défaut
  • La première ligne contient souvent les en-têtes de colonne
  • Facile à lire et à écrire

Travailler avec des fichiers CSV en Python

Python fournit le module intégré csv pour manipuler efficacement les fichiers CSV :

import csv

## Reading CSV file
with open('data.csv', 'r') as file:
    csv_reader = csv.reader(file)
    headers = next(csv_reader)  ## Read header row

    for row in csv_reader:
        print(row)

Types de données CSV

graph TD A[CSV Data Types] --> B[String] A --> C[Numeric] A --> D[Date/Time] A --> E[Boolean]

Défis courants liés aux fichiers CSV

Défi Description Solution
Données incohérentes Lignes avec des valeurs manquantes ou incorrectes Validation des données
Plusieurs séparateurs Utilisation de différents délimiteurs Spécifier le délimiteur
Problèmes d'encodage Encodage de caractères non standard Définir l'encodage approprié

Astuce LabEx

Lorsque vous travaillez avec des fichiers CSV dans le cadre d'analyses de données, LabEx recommande d'implémenter toujours une validation de base des données pour garantir la qualité et la fiabilité des données.

Detecting Invalid Rows

Comprendre les lignes invalides

Les lignes invalides dans les fichiers CSV peuvent apparaître pour diverses raisons telles que :

  • Données manquantes
  • Types de données incorrects
  • Nombre de colonnes incohérent
  • Valeurs inattendues

Stratégies de validation

1. Validation de base des lignes

def is_valid_row(row):
    ## Check row has correct number of columns
    if len(row) != expected_columns:
        return False

    ## Check for empty or None values
    if any(value is None or value.strip() == '' for value in row):
        return False

    return True

2. Validation par vérification de type

graph TD A[Data Validation] --> B[Type Checking] B --> C[Numeric Columns] B --> D[Date Columns] B --> E[String Columns]
def validate_row_types(row):
    try:
        ## Validate age is numeric
        age = int(row[1])

        ## Validate email format
        if not re.match(r"[^@]+@[^@]+\.[^@]+", row[2]):
            return False

        return True
    except ValueError:
        return False

Techniques de validation avancées

Type de validation Description Exemple
Validation par expression régulière (Regex Validation) Correspondance de motifs Adresse e-mail, numéro de téléphone
Validation de plage (Range Validation) Vérification des plages de valeurs Âge entre 0 et 120 ans
Contrainte d'unicité (Unique Constraint) Garantir des valeurs uniques Pas d'ID en double

Filtrer les lignes invalides

def filter_csv_data(input_file, output_file):
    valid_rows = []

    with open(input_file, 'r') as file:
        csv_reader = csv.reader(file)
        headers = next(csv_reader)

        for row in csv_reader:
            if is_valid_row(row) and validate_row_types(row):
                valid_rows.append(row)

    with open(output_file, 'w', newline='') as file:
        csv_writer = csv.writer(file)
        csv_writer.writerow(headers)
        csv_writer.writerows(valid_rows)

Conseil LabEx

Lorsque vous travaillez sur la validation des données, LabEx recommande d'implémenter plusieurs couches de validation pour garantir l'intégrité et la fiabilité des données.

Considérations concernant la gestion des erreurs

  • Consigner les lignes invalides pour une enquête ultérieure
  • Fournir des messages d'erreur clairs
  • Considérer des stratégies de récupération partielle des données

Cleaning CSV Datasets

Workflow de nettoyage des données

graph TD A[Raw CSV Data] --> B[Identify Issues] B --> C[Remove Duplicates] B --> D[Handle Missing Values] B --> E[Normalize Data] B --> F[Correct Formatting]

Gestion des lignes en double

def remove_duplicates(input_file, output_file):
    unique_rows = set()
    cleaned_data = []

    with open(input_file, 'r') as file:
        csv_reader = csv.reader(file)
        headers = next(csv_reader)

        for row in csv_reader:
            row_tuple = tuple(row)
            if row_tuple not in unique_rows:
                unique_rows.add(row_tuple)
                cleaned_data.append(row)

    with open(output_file, 'w', newline='') as file:
        csv_writer = csv.writer(file)
        csv_writer.writerow(headers)
        csv_writer.writerows(cleaned_data)

Stratégies pour les valeurs manquantes

Stratégie Description Exemple
Suppression (Deletion) Supprimer les lignes avec des valeurs manquantes Supprimer les enregistrements incomplèts
Imputation Remplir les valeurs manquantes Moyenne, médiane, mode
Valeur de remplacement (Placeholder) Utiliser des valeurs par défaut 'Inconnu', 0, N/A

Techniques de normalisation des données

def normalize_data(data):
    ## Lowercase string columns
    data = [row.lower() for row in data]

    ## Trim whitespace
    data = [row.strip() for row in data]

    ## Standardize date formats
    def standardize_date(date_string):
        try:
            return datetime.strptime(date_string, '%m/%d/%Y').strftime('%Y-%m-%d')
        except ValueError:
            return None

Méthodes avancées de nettoyage

1. Nettoyage de texte

  • Supprimer les caractères spéciaux
  • Corriger l'orthographe
  • Normaliser les abréviations

2. Nettoyage numérique

  • Gérer les valeurs aberrantes (outliers)
  • Mettre à l'échelle/normaliser les colonnes numériques
  • Convertir les types de données

Pipeline complet de nettoyage des données

def clean_csv_dataset(input_file, output_file):
    with open(input_file, 'r') as file:
        csv_reader = csv.reader(file)
        headers = next(csv_reader)
        cleaned_data = []

        for row in csv_reader:
            ## Apply multiple cleaning steps
            cleaned_row = normalize_row(row)
            validated_row = validate_row(cleaned_row)

            if validated_row:
                cleaned_data.append(validated_row)

    ## Write cleaned data
    with open(output_file, 'w', newline='') as file:
        csv_writer = csv.writer(file)
        csv_writer.writerow(headers)
        csv_writer.writerows(cleaned_data)

Recommandation LabEx

Lors du nettoyage d'ensembles de données CSV, LabEx suggère une approche systématique :

  1. Comprendre vos données
  2. Identifier les problèmes potentiels
  3. Appliquer des techniques de nettoyage ciblées
  4. Valider l'ensemble de données nettoyé

Gestion des erreurs et journalisation

  • Mettre en œuvre un suivi exhaustif des erreurs
  • Journaliser les étapes de transformation
  • Maintenir la traçabilité des données
  • Fournir des rapports de nettoyage détaillés

Résumé

En maîtrisant les techniques de filtrage CSV en Python, les développeurs peuvent nettoyer et valider efficacement les ensembles de données, supprimer les lignes invalides et améliorer l'intégrité globale des données. Ces compétences sont essentielles pour le prétraitement des données, permettant des analyses de données plus précises et fiables dans divers domaines.