Python · Guía práctica

Pandas: cómo leer y limpiar un archivo CSV paso a paso

Pandas es la librería estándar de Python para trabajar con datos tabulares. Este es el flujo básico para dejar un CSV listo para analizar.

Antes de aplicar los ejemplos: los nombres de tablas, columnas, separadores decimales y rutas son ilustrativos. Adáptalos a tu archivo, versión y configuración regional; valida el resultado con una muestra pequeña.

Leer el archivo

import pandas as pd
df = pd.read_csv("ventas.csv", encoding="utf-8", sep=",")
print(df.head())
df.info()

Si ves caracteres extraños, prueba encoding="latin-1". Si el archivo usa punto y coma, cambia sep=";".

Detectar problemas

df.isna().sum()          # nulos por columna
df.duplicated().sum()    # filas duplicadas

Limpiar

df = df.drop_duplicates()
df["importe"] = df["importe"].fillna(0)  # solo si ausencia significa cero
df["fecha"] = pd.to_datetime(df["fecha"], errors="coerce")
df["cliente"] = df["cliente"].str.strip().str.title()
Comparación de un CSV antes y después de limpiarlo con pandas
El mismo archivo antes y después de aplicar la limpieza: sin duplicados, con nulos rellenos y fechas válidas.

Filtrar y resumir

df_2026 = df[df["fecha"].dt.year == 2026]
resumen = df_2026.groupby("cliente")["importe"].sum().sort_values(ascending=False)

Guardar el resultado

resumen.to_csv("resumen.csv")

Revisa siempre los resultados con df.describe() para detectar valores atípicos antes de sacar conclusiones.

Separadores, decimales y valores ausentes

Los CSV no tienen un formato único. Un archivo exportado en español puede separar columnas con punto y coma y escribir decimales con coma. En ese caso prueba pd.read_csv("ventas.csv", sep=";", decimal=","). Si el archivo usa otra codificación, especifica la que realmente tenga; no cambies a latin-1 automáticamente, porque podrías ocultar caracteres mal leídos.

Revisa los nulos antes de sustituirlos. Rellenar un importe ausente con cero solo tiene sentido si el negocio define que ausencia como cero; a veces significa dato desconocido y conviene dejarlo vacío, corregirlo desde la fuente o excluirlo con una regla documentada. Compara recuentos antes y después:

print(df.isna().sum())
print(df.dtypes)
print(df.describe(include="all"))

Guardar sin perder información

Antes de exportar, valida fechas inválidas con errors="coerce" y cuenta cuántas quedaron como nulas. Escribe el resultado en otro archivo y conserva el original: así puedes repetir la transformación y comparar el número de filas, importes y claves antes y después.