Vamos a ponernos manos a la obra y preparar las tablas para la carga masiva de datos desde archivos CSV. Si piensas: "¿Pero para qué hay que preparar la tabla? ¿Qué tiene de complicado?", todavía te queda mucho por descubrir del mundo real. Ningún archivo es "perfecto". Siempre hay alguna pega — ya sean duplicados, espacios de más, errores en los tipos de datos o simplemente una estructura que no cuadra.
Vamos a ver cómo preparar bien la base para que el archivo CSV se cargue sin dramas.
Antes de cargar un archivo CSV, decide cómo se van a guardar los datos en la base. O sea, primero hay que crear una tabla con la estructura adecuada.
Ejemplo: carga de datos de estudiantes
Supón que tienes un archivo CSV students.csv con info sobre estudiantes. Su contenido se ve así:
id,name,age,email,major
1,Alex,20,alex@example.com,Computer Science
2,Maria,21,maria@example.com,Mathematics
3,Otto,19,otto@example.com,Physics
Con esto, creamos la tabla:
CREATE TABLE students (
id SERIAL PRIMARY KEY, -- Identificador único del estudiante
name VARCHAR(100) NOT NULL, -- Nombre del estudiante (cadena de hasta 100 caracteres)
age INT CHECK (age > 0), -- Edad del estudiante (debe ser mayor que 0)
email VARCHAR(100) UNIQUE, -- Email único
major VARCHAR(100) -- Especialidad principal
);
id SERIAL PRIMARY KEY: Añadimos clave primaria para identificar filas de forma única. Si tu archivo CSV ya tiene identificadores únicos, usa la columnaiddel archivo.name VARCHAR(100) NOT NULL: El nombre del estudiante debe estar sí o sí, y el largo máximo es 100 caracteres.age INT CHECK (age > 0): La edad debe ser un número, y ponemos un check para que siempre sea mayor que 0.email VARCHAR(100) UNIQUE: El email tiene que ser único, para evitar registros duplicados.major VARCHAR(100): Indica la especialidad principal del estudiante. Aquí no hay restricciones.
Tus tablas tienen que estar bien pensadas para que encajen con tus datos y a la vez te protejan de datos incorrectos. Así reduces los errores al cargar.
Comprobación de datos antes de cargar
Los archivos CSV suelen traer sorpresas. Antes de cargar los datos, asegúrate de que encajan con la estructura de la tabla.
¿Cómo comprobar los datos?
Coincidencia de columnas
Asegúrate de que el número de columnas en el CSV coincide con el de la tabla. Por ejemplo, si la tabla tiene 5 columnas y el CSV tiene 6, la carga fallará.Tipos de datos
Comprueba que los datos de cada columna son del tipo esperado. Por ejemplo, en la columnaagesolo deberían ir números enteros.
Herramientas para validar
Excel o Google Sheets. Abre el archivo en un editor de hojas de cálculo y asegúrate de que no hay filas vacías ni celdas con datos incorrectos.
Python. Usa la librería pandas para comprobar los tipos de datos:
import pandas as pd
# Leemos el CSV
df = pd.read_csv('students.csv')
# Comprobamos los datos
print(df.dtypes) # Muestra los tipos de datos de cada columna
print(df.isnull().sum()) # Comprueba valores vacíos
Limpieza de datos antes de cargar
Normalmente los datos que vienen de fuera necesitan limpieza. Si no, te arriesgas a tener errores al cargar.
Problemas típicos con archivos CSV
Filas o columnas vacías
Si falta un valor en una columna obligatoria (NOT NULL), dará error.
Ejemplo de datos incorrectos:
id,name,age,email,major
1,Alex,20,alexey@example.com,Computer Science
2,Maria,,maria@example.com,Mathematics
Solución: Cambia los valores vacíos por algo válido. Por ejemplo, pon NULL si falta age.
Espacios de más
Los espacios al principio o al final pueden dar problemas. Por ejemplo, "Alex" y "Alex" se consideran distintos.
Solución en Python: quita los espacios de más.
df = df.apply(lambda x: x.str.strip() if x.dtype == "object" else x)
Caracteres incorrectos o codificación
Si el archivo tiene caracteres especiales que no van con la base de datos, la carga puede fallar.
Ejemplo: Usa la app iconv para cambiar la codificación:
iconv -f WINDOWS-1251 -t UTF-8 students.csv > students_utf8.csv
Limpieza de datos: ejemplo con Python
import pandas as pd
# Leemos el archivo
df = pd.read_csv('students.csv')
# Limpiamos los datos
df['name'] = df['name'].str.strip() # Quitamos espacios
df['email'] = df['email'].str.lower() # Pasamos el email a minúsculas
df['age'] = df['age'].fillna(0) # Rellenamos valores vacíos de edad
df['age'] = df['age'].astype(int) # Convertimos edad a entero
# Guardamos los cambios en un archivo nuevo
df.to_csv('cleaned_students.csv', index=False)
Revisa siempre los datos antes de cargar. Recuerda: un buen programador se ahorra tiempo detectando los problemas antes de que exploten.
Checklist útil para preparar tablas y datos
Antes de empezar con el CSV, revisa:
- La estructura de la tabla encaja con los datos (columnas, tipos de datos, restricciones).
- El archivo CSV no tiene filas vacías, espacios de más ni caracteres incorrectos.
- La codificación del archivo es compatible con PostgreSQL (lo mejor es usar UTF-8).
- Usas herramientas para analizar y limpiar los datos (por ejemplo, Python, Excel).
¡Ahora ya puedes cargar datos desde CSV! Pero antes de hacerlo, asegúrate de que tu tabla está bien estructurada y los datos limpios. En la próxima lección seguimos con el proceso de carga en PostgreSQL, incluyendo cómo manejar errores y conflictos.
GO TO FULL VERSION