Cómo filtrar filas no válidas de archivos CSV

PythonPythonBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En ciencia de datos y programación, manejar archivos CSV a menudo requiere técnicas sólidas para filtrar y limpiar las filas no válidas. Este tutorial explora métodos de Python para detectar y eliminar las entradas de datos problemáticas, asegurando conjuntos de datos de alta calidad para análisis y aplicaciones de aprendizaje automático.


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{{"Cómo filtrar filas no válidas de archivos CSV"}} python/file_reading_writing -.-> lab-437979{{"Cómo filtrar filas no válidas de archivos CSV"}} python/file_operations -.-> lab-437979{{"Cómo filtrar filas no válidas de archivos CSV"}} python/data_collections -.-> lab-437979{{"Cómo filtrar filas no válidas de archivos CSV"}} python/data_serialization -.-> lab-437979{{"Cómo filtrar filas no válidas de archivos CSV"}} end

Conceptos básicos de los datos CSV

¿Qué es un archivo CSV?

CSV (Comma-Separated Values, Valores Separados por Comas) es un formato de archivo simple y ampliamente utilizado para almacenar datos tabulares. Cada línea en un archivo CSV representa una fila de datos, y los valores individuales están separados por comas. Este formato es popular debido a su simplicidad y compatibilidad con diversas herramientas de procesamiento de datos.

Estructura de un archivo CSV

Un archivo CSV típico se ve así:

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

Características clave

  • Formato de texto plano
  • Coma como separador predeterminado
  • La primera fila a menudo contiene los encabezados de las columnas
  • Fácil de leer y escribir

Trabajar con archivos CSV en Python

Python proporciona el módulo csv incorporado para manejar archivos CSV de manera eficiente:

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)

Tipos de datos CSV

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

Desafíos comunes con archivos CSV

Desafío Descripción Solución
Datos inconsistentes Filas con valores faltantes o incorrectos Validación de datos
Múltiples separadores Uso de diferentes delimitadores Especificar delimitador
Problemas de codificación Codificación de caracteres no estándar Establecer la codificación adecuada

Consejo de LabEx

Al trabajar con archivos CSV en el análisis de datos, LabEx recomienda siempre implementar una validación básica de los datos para garantizar la calidad y confiabilidad de los mismos.

Detección de filas no válidas

Comprender las filas no válidas

Las filas no válidas en archivos CSV pueden ocurrir por diversas razones, como:

  • Datos faltantes
  • Tipos de datos incorrectos
  • Número de columnas inconsistente
  • Valores inesperados

Estrategias de validación

1. Validación básica de filas

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. Validación por comprobación de tipos

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

Técnicas de validación avanzadas

Tipo de validación Descripción Ejemplo
Validación por expresiones regulares (Regex Validation) Coincidencia de patrones Correo electrónico, número de teléfono
Validación de rango (Range Validation) Comprobar rangos de valores Edad entre 0 y 120
Restricción de unicidad (Unique Constraint) Asegurar valores únicos Sin IDs duplicados

Filtrado de filas no válidas

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)

Perspectiva de LabEx

Al trabajar con validación de datos, LabEx recomienda implementar múltiples capas de validación para garantizar la integridad y confiabilidad de los datos.

Consideraciones para el manejo de errores

  • Registrar las filas no válidas para una investigación posterior
  • Proporcionar mensajes de error claros
  • Considerar estrategias de recuperación de datos parciales

Limpieza de conjuntos de datos CSV

Flujo de trabajo de limpieza de datos

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]

Manejo de filas duplicadas

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)

Estrategias para valores faltantes

Estrategia Descripción Ejemplo
Eliminación Eliminar filas con valores faltantes Eliminar registros incompletos
Imputación Completar valores faltantes Media, mediana, moda
Marcador de posición Utilizar valores predeterminados 'Desconocido', 0, N/A

Técnicas de normalización de datos

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étodos de limpieza avanzados

1. Limpieza de texto

  • Eliminar caracteres especiales
  • Corregir ortografía
  • Estandarizar abreviaturas

2. Limpieza numérica

  • Manejar valores atípicos (outliers)
  • Escalar/normalizar columnas numéricas
  • Convertir tipos de datos

Flujo de limpieza de datos completo

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)

Recomendación de LabEx

Al limpiar conjuntos de datos CSV, LabEx sugiere un enfoque sistemático:

  1. Entender tus datos
  2. Identificar posibles problemas
  3. Aplicar técnicas de limpieza específicas
  4. Validar el conjunto de datos limpio

Manejo de errores y registro

  • Implementar un seguimiento exhaustivo de errores
  • Registrar los pasos de transformación
  • Mantener la trazabilidad de los datos
  • Proporcionar informes detallados de limpieza

Resumen

Al dominar las técnicas de filtrado de archivos CSV en Python, los desarrolladores pueden limpiar y validar eficazmente los conjuntos de datos, eliminando las filas no válidas y mejorando la integridad general de los datos. Estas habilidades son cruciales para el preprocesamiento de datos, lo que permite un análisis de datos más preciso y confiable en diversos dominios.