Manejo de archivos CSV
Cita con formato IEEE:
E. Bahit, "Manejo de archivos CSV", in
Python Aplicado, 4th ed., EBRC Publisher, 2022, pp.
91–97.
Cita con formato APA 7:
Bahit, E. (2022). Manejo de archivos CSV. In
Python Aplicado (4th ed., pp. 91–97). EBRC Publisher.
Cita en línea:
(Bahit, 2022)
El formato CSV deriva su nombre del inglés «comma separated values» (valores separados por coma), definido en las RFC 4180. Se trata de archivos de texto plano, destinados al almacenamiento masivo de datos. Es uno de los formatos más simples para efectuar análisis de datos.
De hecho, muchos formatos de archivo no libres (o libres pero más complejos), suelen pasarse a formato CSV para aplicar ciencia de datos compleja con diversos lenguajes.
Un archivo CSV se encuentra formado por una cabecera que define nombres de columnas, y las filas siguientes, tienen los datos correspondientes a cada columna, separados por una coma. Sin embargo, muchos otros símbolos pueden utilizarse como separadores de celdas. Entre ellos, el tabulado y el punto y coma son igual de frecuentes que la coma.
Algunos ejemplos de archivos CSV
Datos meteorológicos (separados por ;)
ID;DATA;VV;DV;T;HR;PPT;RS;P 0;2016-03-01 00:00:00;;;9.9;73;;; 1;2016-03-01 00:30:00;;;9.0;67;;; 2;2016-03-01 01:00:00;;;8.3;64;;; 3;2016-03-01 01:30:00;;;8.0;61;;; 4;2016-03-01 02:00:00;;;7.4;62;;; 5;2016-03-01 02:30:00;;;8.3;47;;; 6;2016-03-01 03:00:00;;;7.7;50;;; 7;2016-03-01 03:30:00;;;9.0;39;;;
Puntajes obtenidos por jugadores de un torneo (separados por coma)
nombre,cantidad,anio Maria,858,1930 Jose,665,1930 Rosa,591,1930 Juan Carlos,522,1930 Antonio,509,1930 Maria Esther,495,1930 Maria Luisa,470,1930 Juana,453,1930 Juan,436,1930
Empresas registradas en la Inspección General de Justicia de Argentina (separados por , y datos entrecomillados)
"numero_correlativo","tipo_societario","descripcion_tipo_societario","razon_social","dada_de_baja","codigo_baja","detalle_baja" "10","10","SOCIEDAD COLECTIVA","A A VALLE Y COMPA¥IA","S","42014","PERTENECE A REGISTRO ENTIDADES INACTIVAS" "11","10","SOCIEDAD COLECTIVA","A LUCERO Y H CARATOLI","S","42014","PERTENECE A REGISTRO ENTIDADES INACTIVAS" "12","10","SOCIEDAD COLECTIVA","A PUIG E HIJOS","S","42014","PERTENECE A REGISTRO ENTIDADES INACTIVAS" "13","10","SOCIEDAD COLECTIVA","A C I C A","S","42014","PERTENECE A REGISTRO ENTIDADES INACTIVAS" "14","10","SOCIEDAD COLECTIVA","A¥ON BEATRIZ S Y CIA","S","42014","PERTENECE A REGISTRO ENTIDADES INACTIVAS" "15","10","SOCIEDAD COLECTIVA","ABA DIESEL","S","42014","PERTENECE A REGISTRO ENTIDADES INACTIVAS" "16","10","SOCIEDAD COLECTIVA","ABADA L JOSE Y JORGE JOSE ABADAL","S","42014","PERTENECE A REGISTRO ENTIDADES INACTIVAS" "17","10","SOCIEDAD COLECTIVA","ABADAL JOSE E HIJO","S","42014","PERTENECE A REGISTRO ENTIDADES INACTIVAS" "18","10","SOCIEDAD COLECTIVA","ABATE Y MACIAS","S","42014","PERTENECE A REGISTRO ENTIDADES INACTIVAS"
Es posible también, encontrar datos almacenados en archivos de texto (TXT) con formatos muy similares al que se espera encontrar en un CSV. A veces es posible desarrollar un script de formato para corregir estos archivos y así poder trabajar con un CSV.
Observaciones meteorológicas en TXT
FECHA TMAX TMIN NOMBRE -------- ----- ----- ------------------------------- 07122017 28.0 19.0 AEROPARQUE AERO 07122017 26.8 12.4 AZUL AERO 07122017 29.6 7.8 BAHIA BLANCA AERO 07122017 22.7 6.7 BARILOCHE AERO 07122017 3.0 -8.5 BASE BELGRANO II 07122017 2.4 -0.2 BASE CARLINI (EX JUBANY) 07122017 3.9 -0.6 BASE ESPERANZA 07122017 0.7 -3.6 BASE MARAMBIO
Trabajar con archivos CSV desde Python
Python provee de un módulo propio llamado csv, que facilita el parseo de los datos de archivos CSV, tanto para lectura como escritura.
Este módulo, se utiliza en combinación con la estructura with y la función open, para leer o generar el archivo, y el módulo CSV para su análisis (parsing).
Lectura de archivos CSV
Contenido de archivo.csv
0;2016-03-01 00:00:00;;;9.9;73;;; 1;2016-03-01 00:30:00;;;9.0;67;;; 2;2016-03-01 01:00:00;;;8.3;64;;; 3;2016-03-01 01:30:00;;;8.0;61;;; 4;2016-03-01 02:00:00;;;7.4;62;;; 5;2016-03-01 02:30:00;;;8.3;47;;; 6;2016-03-01 03:00:00;;;7.7;50;;; 7;2016-03-01 03:30:00;;;9.0;39;;; 8;2016-03-01 04:00:00;;;8.7;39;;;
from csv import reader with open("archivo.csv", "r") as archivo: documento = reader(archivo, delimiter=';', quotechar='"') for fila in documento: ' '.join(fila)
Salida:
Cuando el archivo CSV tiene una cabecera, es necesario saltar dicho encabezado:
Contenido de archivo.csv
ID;DATA;VV;DV;T;HR;PPT;RS;P 0;2016-03-01 00:00:00;;;9.9;73;;; 1;2016-03-01 00:30:00;;;9.0;67;;; 2;2016-03-01 01:00:00;;;8.3;64;;; 3;2016-03-01 01:30:00;;;8.0;61;;; 4;2016-03-01 02:00:00;;;7.4;62;;; 5;2016-03-01 02:30:00;;;8.3;47;;; 6;2016-03-01 03:00:00;;;7.7;50;;; 7;2016-03-01 03:30:00;;;9.0;39;;; 8;2016-03-01 04:00:00;;;8.7;39;;; from csv import reader with open("archivo.csv", "r") as archivo: documento = reader(archivo, delimiter=';', quotechar='"') cabeceras = next(documento) for fila in documento: ' '.join(fila)
Salida:
Otra forma de leer archivos CSV con cabeceras, es utilizar el objeto DictReader en vez de reader, y así acceder solo al valor de las columnas deseadas, por su nombre:
from csv import DictReader with open("archivo.csv", "r") as archivo: documento = DictReader(archivo, delimiter=';', quotechar='"') for fila in documento: fila['DATA']
Salida:
Escritura de archivos CSV
Escritura de un CSV sin cabecera:
from csv import writer with open("datos.csv", "w") as archivo: doc = writer(archivo, delimiter=';', quot...