CSV: Guía Completa del Formato de Valores Separados por Comas
CSV (Comma-Separated Values / Valores Separados por Comas) es la lingua franca del intercambio de datos. No es llamativo, no es potente, y no puede almacenar fórmulas, formato o múltiples hojas — pero es universalmente compatible, legible por humanos y ha sobrevivido durante más de 50 años precisamente por esas limitaciones. Cada aplicación de hoja de cálculo, base de datos, herramienta de ciencia de datos y lenguaje de programación puede leer y escribir CSV.
¿Qué es CSV?
Un archivo CSV almacena datos tabulares — filas y columnas — como texto plano. Cada fila es una línea; los valores dentro de cada fila están separados por comas (u otro delimitador). La primera fila normalmente contiene encabezados de columna.
Nombre,Email,Edad,Ciudad
Alice Smith,alice@ejemplo.com,32,Nueva York
Bob Jones,bob@ejemplo.com,28,Londres
Carol Williams,carol@ejemplo.com,45,Toronto
Una hoja de cálculo de 3 filas y 3 columnas en Excel se guardaría como un archivo .xlsx de varios kilobytes con metadatos XML; como CSV, son 105 bytes.
El "Estándar" que No lo es del Todo
CSV no tiene un estándar formal — o más bien, tiene RFC 4180 (2005), una descripción "de facto" que muchas implementaciones violan. Las reglas prácticas que la mayoría de los analizadores siguen:
- Cada registro en su propia línea, terminado por CRLF o LF
- El primer registro puede contener una fila de encabezado (por convención, no por requisito)
- Los campos pueden estar entre comillas dobles — requerido si el campo contiene comas, saltos de línea o comillas dobles
- Una comilla doble dentro de un campo entre comillas se escapa con una segunda comilla doble
Delimitadores: CSV No Siempre Está Separado por Comas
Confusamente, el "estándar" CSV a menudo se aplica a archivos con delimitadores no de coma:
- TSV (Valores Separados por Tabulaciones): tabulaciones como delimitadores
- Separado por punto y coma: común en Excel europeo (los países que usan coma como separador decimal usan punto y coma como delimitador CSV)
- Separado por barra vertical (
|): usado en algunas exportaciones de bases de datos
Comillas y Escape
"Nombre","Cita Favorita","Puntuación"
"Alice","Dijo ""Me encanta el CSV""",95
"Bob","Línea 1
Línea 2",82
"Carol","Comas, comas, comas",78
- Los campos con comas van entre comillas
- Los campos con comillas dobles las duplican
- Los campos con saltos de línea incrustados van entre comillas
Codificación de Caracteres
UTF-8: la mejor práctica para nuevos archivos CSV. Maneja cualquier idioma/script.
UTF-8 con BOM: Excel (anterior a 2016) abre CSV UTF-8 incorrectamente sin el BOM. Añadir el BOM soluciona Excel.
Windows-1252 / Latin-1: codificación heredada usada por herramientas Windows antiguas. Produce salida ilegible cuando se abre como UTF-8.
Convertir codificación:
iconv -f windows-1252 -t utf-8 entrada.csv -o salida.csv
Leer CSV en Diferentes Lenguajes
Python (pandas)
import pandas as pd
df = pd.read_csv('datos.csv', encoding='utf-8')
print(df.head())
# Con opciones
df = pd.read_csv('datos.csv',
delimiter=';', # separado por punto y coma
encoding='windows-1252',
decimal=',', # separador decimal europeo
parse_dates=['Fecha']
)
Python (módulo csv integrado)
import csv
with open('datos.csv', newline='', encoding='utf-8') as f:
reader = csv.DictReader(f)
for fila in reader:
print(fila['Nombre'], fila['Email'])
SQL (PostgreSQL COPY)
COPY usuarios (nombre, email, edad, ciudad)
FROM '/ruta/a/datos.csv'
WITH (FORMAT csv, HEADER true, DELIMITER ',', ENCODING 'utf8');
Convertir CSV
CSV → Excel (.xlsx)
Excel abre archivos .csv directamente. Para preservar el formato y los tipos:
- En Excel: Datos → Obtener datos → Desde texto/CSV
- El asistente de importación de Power Query permite especificar delimitador, codificación y tipos de columna
O usa Python: df.to_excel('salida.xlsx', index=False) (requiere openpyxl)
CSV → JSON
import csv, json
with open('datos.csv', encoding='utf-8') as f:
filas = list(csv.DictReader(f))
with open('datos.json', 'w', encoding='utf-8') as f:
json.dump(filas, f, indent=2, ensure_ascii=False)
Base de datos → Exportar CSV
-- PostgreSQL
\COPY (SELECT * FROM usuarios) TO 'salida.csv' CSV HEADER;
Mejores Prácticas de CSV
- Especifica siempre la codificación explícitamente — UTF-8 para archivos nuevos
- Incluye siempre una fila de encabezado — hace el archivo autodescriptivo
- Usa dobles comillas para campos de cadena que puedan contener comas o saltos de línea
- Usa ISO 8601 para fechas:
2025-04-25es inequívoco;25/04/25no lo es - No dependas del orden de columnas — usa la fila de encabezado como contrato
- Para archivos grandes: prefiere analizadores en streaming en lugar de cargar todo en memoria
- Para datos complejos: considera JSON, Parquet o Arrow — CSV no puede representar estructuras anidadas de forma fiable
La fortaleza de CSV es su universalidad. Es el único formato que puedes abrir con un editor de texto, importar en Excel, leer con Python, cargar en PostgreSQL y pasar a un dataframe de R — todo sin conversión ni herramientas especiales.
Conversiones relacionadas
Conversiones de documento que siguen este tema: