1 / 1
Presentación
← Curso

Módulo 2 Gestión de datos Excel · CSV · texto · shapefile

Oscar Iván Vargas Pineda Docente
Cómo vamos a avanzar

De un archivo a una tabla, y de vuelta

En Fundamentos aprendiste a manejar datos que escribías tú. Aquí los datos vienen de fuera: de un Excel, de una exportación, de un sistema de información geográfica. El trabajo es siempre el mismo — abrirlos, entenderlos, trabajarlos y volver a guardarlos.

01

Dónde está el archivo

rutas y carpetas

02

El DataFrame

la tabla en memoria

03

CSV

read_csv

04

Excel

read_excel · hojas

05

Texto

separadores

06

Shapefile

datos con mapa

07

Reconocer

head · shape · info

08

Exportar

los cuatro formatos

09

Exportar bien

rutas y carpetas

10

Elegir

columnas y filas

11

Filtrar

por condición

12

Renombrar

columnas y etiquetas

13

Crear columnas

calculadas · condición

14

Ordenar y limpiar

duplicados · vacíos

15

Agrupar

groupby · resúmenes

Chuleta

para reutilizar

Práctica

12 ejercicios en 3 bloques

Trabajaremos con datos reales: 500 ventas de una empresa colombiana, en los tres formatos con los que te los van a entregar.
Capítulo 1

La ruta: el error que verás más veces

Antes de leer nada hay que decirle a Python dónde buscar. El 90% de los FileNotFoundError no son un archivo que falta: son una ruta mal escrita.

C:/ └─ Users/ └─ Ana/ └─ curso-datos/ ← ESTÁS AQUÍ ├─ analisis.py ├─ ventas.csv └─ datos/ └─ ventas_empresa.csv

Una ruta es el camino desde un punto de partida hasta el archivo. Lo único que cambia entre una y otra es dónde empieza ese camino.

Las barras invertidas de Windows

Si copias una ruta de Windows te dará C:\Users\Ana, y \U significa otra cosa para Python. Tienes tres salidas: cambiar a /, duplicarlas \\, o poner una r delante: r"C:\Users\Ana".

Ruta relativa · caso AEl archivo está al lado de tu script

"ventas.csv"

Empieza donde estás. No hay que subir ni bajar de carpeta: basta el nombre del archivo.

Ruta relativa · caso BEl archivo está en una subcarpeta

"datos/ventas_empresa.csv"

Empieza donde estás y baja una carpeta. Cada / significa «entra aquí».

Ruta absoluta · desde la raíz del discoEl camino completo, desde C:/

"C:/Users/Ana/curso-datos/datos/ventas_empresa.csv"

Fíjate: la ruta relativa es la cola de la absoluta. Lo de más, en ámbar, es lo que solo existe en tu computador — en el de otra persona esa ruta falla seguro.

Usa siempre la relativa. Si mueves la carpeta entera a otro computador, o se la pasas a un compañero, sigue funcionando.
Capítulo 3

El DataFrame

pandas no abre Excel: lee el archivo y hace una copia de la tabla dentro de la memoria del programa. Esa tabla se llama DataFrame, y es con lo que trabajarás el resto del curso.

Piénsalo como una hoja de cálculo que se abre sin abrir Excel. Al hacer la copia cambian tres cosas:

1 La primera fila se vuelve · el nombre de las columnas

Deja de ser la fila 1: pasa a ser la cabecera. Por eso puedes pedir df["ciudad"] en vez de acordarte de que era la columna B.

2 Las filas se numeran · desde 0

Ese número de la izquierda es el índice. No es un dato ni una columna del archivo: es la etiqueta de cada fila.

3 Viajan los datos · no el formato

Colores, fórmulas, celdas combinadas y anchos de columna se quedan atrás. Llega el contenido, que es lo que se analiza.

Por convención se le llama df. Lo verás así en todo internet.

Leer no es modificar

Cargar un archivo no lo cambia. Todo lo que hagas ocurre en esa copia en memoria; el archivo original sigue intacto hasta que tú decidas exportar.

ventas.xlsx · como lo ves en Excel

AB
1ciudadventas_cop
2Bogotá6369760
3Envigado2101320
pd.read_excel("ventas.xlsx")

df · como lo ve Python

     ciudad  ventas_cop
0    Bogotá     6369760
1  Envigado     2101320
la fila 1 del Excel = nombres de columna 0 · 1 = el índice, empieza en cero
Antes de entrar en cada formato

Tres puertas, la misma habitación

Da igual en cuál de los tres formatos te entreguen los datos: cada uno entra por su función y los tres salen convertidos en el mismo DataFrame. Los siguientes tres capítulos son estas tres puertas, una por una.

Excel · .xlsxventas_empresa.xlsx read_excel()
CSV · .csvventas_empresa.csv read_csv()
Texto · .txtventas_empresa.txt read_csv(sep="\t")
df 500 filas × 17 columnas
        fecha    ciudad       categoria_producto  unidades  ventas_cop
0  2025-01-06   Armenia  Papelería y consumibles         9      157460
1  2025-01-07  Envigado        Muebles y oficina         5     2101320

El mismo objeto en los tres casos: mismas columnas, mismos tipos, mismo número de filas.

Esta es la idea central del módulo: el formato solo importa en la primera línea. Después trabajas siempre con un DataFrame.
Capítulo 2

CSV: texto separado por comas

Un CSV es un archivo de texto plano donde cada línea es una fila y las columnas van separadas por comas. Lo abre cualquier programa, y por eso es el formato en el que casi todo sistema exporta.

ventas_empresa.csv · así se ve por dentro
id_venta,fecha,region,ciudad,unidades,ventas_cop
V-2025001,2025-01-06,Eje Cafetero,Armenia,9,157460
V-2025002,2025-01-07,Antioquia,Envigado,5,2101320
V-2025003,2025-01-09,Meta,Villavicencio,11,155705
Si ves todo en una sola columna, el separador no era una coma. En Colombia Excel suele exportar con ; — entonces se usa sep=";".
python
import pandas as pd

df = pd.read_csv("ventas_empresa.csv")
print(df.head())
        fecha         ciudad       categoria_producto  unidades  ventas_cop
0  2025-01-06        Armenia  Papelería y consumibles         9      157460
1  2025-01-07       Envigado        Muebles y oficina         5     2101320
2  2025-01-09  Villavicencio  Papelería y consumibles        11      155705
3  2025-01-11        Soledad  Papelería y consumibles        40     1770720
4  2025-01-15         Bogotá               Tecnología         2     6369760

Los tres argumentos que salvan el día

sep=";"encoding="latin-1"decimal=","

Separador, tildes rotas y comas decimales: los tres problemas clásicos de un CSV hecho en Excel en español.

Capítulo 4

Excel: hojas y celdas

Un .xlsx no es texto: es un archivo comprimido con formato, fórmulas y varias hojas. Por eso pandas necesita openpyxl para abrirlo.

Argumentos propios de Excel

sheet_nameskiprowsusecols

sheet_name elige la hoja (por nombre o por número) · skiprows salta las filas de título que la gente pone arriba · usecols trae solo unas columnas.

El error más frecuente

ModuleNotFoundError: openpyxl. No falta pandas: falta la pieza que lee .xlsx. Se resuelve con pip install openpyxl.

sheet_name=None te devuelve todas las hojas en un diccionario: la clave es el nombre de la hoja y el valor, su DataFrame.
python
import pandas as pd

# La primera hoja, sin más
df = pd.read_excel("ventas_empresa.xlsx")

# Una hoja concreta
df = pd.read_excel("ventas_empresa.xlsx",
                   sheet_name="2025")

# Saltando 3 filas de encabezado decorativo
df = pd.read_excel("ventas_empresa.xlsx",
                   skiprows=3)

print(df.head(3))
        fecha         ciudad       categoria_producto  unidades  ventas_cop
0  2025-01-06        Armenia  Papelería y consumibles         9      157460
1  2025-01-07       Envigado        Muebles y oficina         5     2101320
2  2025-01-09  Villavicencio  Papelería y consumibles        11      155705
Capítulo 5

Texto plano: tú eliges el separador

Un .txt con datos es un CSV al que le cambiaron el separador. Se lee con la misma función, diciéndole qué carácter separa las columnas.

ventas_empresa.txt · separado por tabulaciones
id_venta    fecha        region          ciudad
V-2025001   2025-01-06   Eje Cafetero    Armenia
V-2025002   2025-01-07   Antioquia       Envigado
V-2025003   2025-01-09   Meta            Villavicencio

Separadores que te vas a encontrar

sep=","sep=";"sep="\t"sep="|"

\t es la tabulación. Es el separador por defecto cuando alguien copia de Excel y pega en un bloc de notas.

python
import pandas as pd

df = pd.read_csv("ventas_empresa.txt",
                 sep="\t",
                 encoding="utf-8")

print(df.head(3))
        fecha         ciudad       categoria_producto  unidades  ventas_cop
0  2025-01-06        Armenia  Papelería y consumibles         9      157460
1  2025-01-07       Envigado        Muebles y oficina         5     2101320
2  2025-01-09  Villavicencio  Papelería y consumibles        11      155705
Fíjate: la función es read_csv, no read_txt. La extensión del archivo da igual; lo que importa es cómo está separado por dentro.
Capítulo 6

Shapefile: una tabla con mapa

Un shapefile es una tabla normal más una columna especial, geometry, que guarda dónde está cada fila: un punto, una línea o un polígono. Se lee con geopandas.

Un .shp no es un archivo: son cinco

.shp guarda la geometría, .dbf la tabla, .shx el índice y .prj el sistema de coordenadas. Si mueves uno solo, deja de abrirse. Siempre se copian juntos.

Lo que añade geopandas

GeoDataFramegeometry.crs

Un GeoDataFrame es un DataFrame normal: sirve todo lo que ya sabes. Solo trae una columna de geometría y un CRS, que dice en qué sistema están esas coordenadas.

EPSG:4326 es el de latitud y longitud de toda la vida — el que usa el GPS y Google Maps. Geopandas se instala aparte: pip install geopandas.
0 Bogotá 59,4 M 1 Medellín 21,0 M 2 Cali 15,6 M 3 Barranquilla 17,7 M
punto — una ciudad línea — una vía polígono — un municipio

El número de cada punto es el índice de su fila: la fila 0 de la tabla es ese círculo sobre Bogotá. Cada fila es una forma en el mapa — eso es todo lo que añade un shapefile.

python
import geopandas as gpd

mapa = gpd.read_file("ciudades.shp")
print(mapa.head())
         ciudad  ventas_cop             geometry
0        Bogotá    59411340  POINT (-74.07 4.71)
1      Medellín    21013200  POINT (-75.56 6.24)
2          Cali    15570500  POINT (-76.52 3.44)
3  Barranquilla    17707200  POINT (-74.8 10.96)
Capítulo 7

Antes de tocar nada: mira qué llegó

Cargar un archivo no es entenderlo. Estas cinco órdenes son el ritual de reconocimiento: cuántas filas hay, cómo se llaman las columnas y de qué tipo es cada una.

Asomarse

.head().tail().sample()

Las primeras, las últimas, o unas al azar. .sample() es la más honesta: no te enseña solo el principio, que suele estar limpio.

Medir

.shape.columns.info()

Tamaño, nombres y tipos. .info() además delata los datos faltantes.

python
df.shape
df.columns
df.info()
(500, 17)

['id_venta', 'fecha', 'region', 'ciudad', 'canal_venta',
 'categoria_producto', 'segmento_cliente', 'vendedor',
 'unidades', 'precio_unitario_cop', 'descuento_pct',
 'ventas_cop', 'costo_cop', 'utilidad_cop', 'margen_pct',
 'dias_entrega', 'satisfaccion_cliente']
df.info() · el más completo
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 500 entries, 0 to 499
Data columns (total 5 columns):
 #   Column              Non-Null Count  Dtype
---  ------              --------------  -----
 0   fecha               500 non-null    object
 1   ciudad              500 non-null    object
 2   categoria_producto  500 non-null    object
 3   unidades            500 non-null    int64
 4   ventas_cop          500 non-null    int64
dtypes: int64(2), object(3)
Mira la columna Dtype. Si una fecha aparece como object, para Python es texto, no una fecha: no podrás ordenar ni filtrar por mes hasta convertirla.
Capítulo 8

Exportar: devolver el resultado

Cada read_ tiene su to_. Lo que cambia es que ahora el archivo sí se escribe en tu disco: si el nombre ya existe, lo sobrescribe sin preguntar.

1 Excel · .xlsx

python
df.to_excel("resultado.xlsx",
            index=False)

2 CSV · .csv

python
df.to_csv("resultado.csv",
          index=False)

# para Excel en español
df.to_csv("resultado.csv", index=False,
          sep=";", encoding="utf-8-sig")

3 Texto · .txt

python
df.to_csv("resultado.txt",
          index=False, sep="\t")

Entras por un formato y sales por otro

ventas.txt read_csv(sep="\t") df to_excel() resultado.xlsx

El formato de entrada no manda sobre el de salida. Te entregan un .txt incómodo y devuelves un Excel presentable: eso es lo que harás en el ejercicio.

Solo si trabajas con mapas

mapa.to_file("ciudades.shp")

Escribe los cinco archivos del shapefile de una vez. Necesita geopandas y un GeoDataFrame, no un DataFrame normal.

Pon siempre index=False

Sin él, pandas añade una primera columna con 0, 1, 2, 3… que no significa nada. Es la causa número uno de esas columnas fantasma Unnamed: 0 que aparecen al reabrir el archivo.

utf-8-sig para Excel

Si abres un CSV en Excel y las tildes salen rotas, no está mal guardado: Excel necesita esa marca al principio del archivo para reconocer el UTF-8.

Capítulo 9

Dónde se guarda lo que exportas

Si escribes solo el nombre del archivo, se guarda junto a tu script. En cuanto generas más de un archivo, conviene ordenarlos en carpetas — y crearlas desde el propio código.

Crear la carpeta antes de escribir

os.makedirs()exist_ok=True

Sin la carpeta creada, pandas lanza FileNotFoundError. Con exist_ok=True no falla si ya existía.

Varias hojas en un mismo Excel

ExcelWritersheet_name

Un solo archivo con una hoja por ciudad, por mes o por lo que necesites.

Con esto ya puedes cerrar el ciclo completo: abrir un archivo, transformarlo y devolver el resultado. Es exactamente lo que hace un informe automatizado.
python · una carpeta de salida
import os
import pandas as pd

os.makedirs("resultados", exist_ok=True)

df.to_excel("resultados/ventas.xlsx",
            index=False)
python · una hoja por ciudad
ciudades = ["Bogotá", "Medellín", "Cali"]

with pd.ExcelWriter("resultados/por_ciudad.xlsx") as w:
    for ciudad in ciudades:
        parte = df[df["ciudad"] == ciudad]
        parte.to_excel(w, sheet_name=ciudad,
                       index=False)
Capítulo 10 · empieza el trabajo con los datos

Elegir columnas y filas

Ya sabes abrir el archivo y devolverlo. Lo que viene ahora es lo que pasa en medio. Y lo primero es quedarte solo con el trozo de tabla que te interesa.

python · una columna
df["ciudad"]
0          Armenia
1         Envigado
2    Villavicencio
Name: ciudad, dtype: object
python · varias columnas · doble corchete
df[["ciudad", "unidades", "ventas_cop"]]
          ciudad  unidades  ventas_cop
0        Armenia         9      157460
1       Envigado         5     2101320
2  Villavicencio        11      155705

Un corchete o dos: no es lo mismo

Con un corchete pides una columna suelta y recibes una Serie. Con dos le pasas una lista de nombres y recibes otra tabla. Casi todo en pandas espera una tabla, así que ante la duda: dos corchetes.

python · elegir filas y columnas a la vez
# Por nombre: .loc[filas, columnas]
df.loc[0, "ciudad"]
df.loc[0:2, ["ciudad", "ventas_cop"]]

# Por posición: .iloc[filas, columnas]
df.iloc[0]        # la primera fila entera
df.iloc[:5]       # las cinco primeras filas
df.iloc[0, 1]     # fila 0, segunda columna

Para recordarlo

.loc = por etiqueta.iloc = por índice

La l de loc es de «label». La i de iloc es de «index», la posición: 0, 1, 2…

Capítulo 11

Filtrar: la operación que más vas a usar

Es el «filtro» de Excel, pero escrito. Y la clave está en entender qué hay dentro de los corchetes: una columna de verdadero y falso.

paso 1 · la condición sola
df["ventas_cop"] > 1000000
0    False
1     True
2    False
Name: ventas_cop, dtype: bool
paso 2 · la condición dentro del corchete
grandes = df[df["ventas_cop"] > 1000000]

print(df.shape)
print(grandes.shape)
(500, 17)
(118, 17)
Pandas se queda con las filas donde pone True. Nada más. Mismas columnas, menos filas.
python · las cuatro formas que necesitas
# Dos condiciones a la vez: & es "y", | es "o"
df[(df["ciudad"] == "Bogotá") &
   (df["unidades"] >= 10)]

# Cualquiera de una lista de valores
df[df["ciudad"].isin(["Bogotá", "Cali", "Medellín"])]

# Texto que contiene algo
df[df["categoria_producto"].str.contains("Papelería")]

# Lo contrario: ~ significa "no"
df[~df["ciudad"].isin(["Bogotá"])]

Aquí and y or no funcionan

Con dos condiciones hay que usar & y |, y envolver cada condición en paréntesis. Si lo olvidas sale un ValueError larguísimo que asusta y solo significa eso.

Capítulo 12

Renombrar: columnas y etiquetas

Los archivos reales llegan con nombres como VENTAS COP o Categoría_Producto, y con la misma ciudad escrita de tres maneras. Se arregla en dos líneas.

python · cambiar el nombre de las columnas
# Solo algunas, por nombre
df = df.rename(columns={
    "ventas_cop": "ventas",
    "categoria_producto": "categoria"
})

# Todas de una vez: sin espacios y en minúscula
df.columns = df.columns.str.strip().str.lower()
antes:  ['fecha', 'ciudad', 'categoria_producto', 'unidades', 'ventas_cop']
después: ['fecha', 'ciudad', 'categoria', 'unidades', 'ventas']

Lo que hace cada pieza

.rename(columns=).str.strip().str.lower().replace()

strip quita los espacios de los bordes — el error invisible que hace que df["ventas "] falle aunque la columna «exista».

python · cambiar etiquetas dentro de una columna
df["ciudad"] = df["ciudad"].replace({
    "BOGOTA": "Bogotá",
    "Bogota D.C.": "Bogotá",
    "STA MARTA": "Santa Marta"
})

print(df["ciudad"].unique())
['Bogotá' 'Envigado' 'Santa Marta' 'Armenia' ...]

Si no lo guardas, no pasó

rename, replace, dropno modifican el DataFrame: devuelven una copia cambiada. Hay que reasignarla con df = df.rename(...). Es el error silencioso número uno: el código corre, no da error, y nada cambia.

df["ciudad"].unique() te dice todas las formas distintas en que está escrita una columna. Úsalo antes de decidir qué reemplazar.
Capítulo 13

Crear columnas (y quitar las que sobran)

Se crea una columna igual que se crea una variable: escribiendo su nombre a la izquierda del =. El cálculo se aplica a las 500 filas a la vez, sin escribir ningún bucle.

python · columna calculada
# A partir de otras dos columnas
df["precio_unitario"] = df["ventas_cop"] / df["unidades"]

# Redondear y volverla número entero
df["precio_unitario"] = df["precio_unitario"].round(0).astype(int)

# Quitar las columnas que no vas a usar
df = df.drop(columns=["id_venta"])
          ciudad  unidades  ventas_cop  precio_unitario
0        Armenia         9      157460            17496
1       Envigado         5     2101320           420264
2  Villavicencio        11      155705            14155
Si el nombre no existe, la columna se crea al final. Si ya existe, se sobrescribe. Es la misma línea para las dos cosas.
python · columna con una condición
import numpy as np

df["tamano"] = np.where(df["ventas_cop"] > 1000000,
                        "Grande", "Pequeña")
   ventas_cop   tamano
0      157460  Pequeña
1     2101320   Grande
python · sacar partes de una fecha
# Primero: convertir el texto en fecha de verdad
df["fecha"] = pd.to_datetime(df["fecha"])

df["anio"] = df["fecha"].dt.year
df["mes"]  = df["fecha"].dt.month

Léelo así

np.where(condición, si_sí, si_no)

Es el SI() de Excel, aplicado a toda la columna de golpe.

Capítulo 14

Ordenar y quitar lo que estorba

Ningún archivo real llega limpio: viene desordenado, con filas repetidas y con casillas vacías. Estas cuatro líneas resuelven la mayoría de los casos.

python · ordenar
# De mayor a menor
df = df.sort_values("ventas_cop", ascending=False)

# Las cinco ventas más grandes
df.sort_values("ventas_cop", ascending=False).head(5)

# Por dos criterios: primero ciudad, luego ventas
df.sort_values(["ciudad", "ventas_cop"],
               ascending=[True, False])
python · filas repetidas
print(df.duplicated().sum())
df = df.drop_duplicates()
4
python · casillas vacías
# ¿Cuántas faltan en cada columna?
df.isna().sum()
fecha         0
ciudad        3
unidades      0
ventas_cop    7
dtype: int64
python · las dos salidas
# Borrar las filas a las que les falta ese dato
df = df.dropna(subset=["ventas_cop"])

# O rellenar con un valor
df["unidades"] = df["unidades"].fillna(0)

Pon siempre subset=

df.dropna() a secas borra la fila si le falta cualquiera de las 17 columnas. Con datos reales eso se lleva media tabla sin avisar. Decide siempre qué columna es la imprescindible.

Capítulo 15

Agrupar: la tabla dinámica, en una línea

Agrupar es siempre lo mismo, tres pasos: partir la tabla en grupos, calcular algo en cada grupo y juntar los resultados. Es la tabla dinámica de Excel.

500 filas partir por ciudad sumar cada grupo 1 fila por ciudad
python · contar y sumar
# ¿Cuántas ventas hay por ciudad?
df["ciudad"].value_counts()

# ¿Cuánto se vendió en cada ciudad?
df.groupby("ciudad")["ventas_cop"].sum()
ciudad
Bogotá          59411340
Medellín        21013200
Barranquilla    17707200
Cali            15570500
Name: ventas_cop, dtype: int64
python · varios resúmenes a la vez
df.groupby("ciudad")["ventas_cop"].agg(["sum", "mean", "count"])
                   sum       mean  count
ciudad
Bogotá        59411340   594113.4    100
Medellín      21013200   420264.0     50
Cali          15570500   311410.0     50
python · y de vuelta al disco
resumen = (df.groupby("ciudad")["ventas_cop"].sum()
             .sort_values(ascending=False)
             .reset_index())

resumen.to_excel("resumen_por_ciudad.xlsx", index=False)
.reset_index() convierte el resultado agrupado en una tabla normal, con «ciudad» otra vez como columna. Sin él, el Excel te sale raro.
Para reutilizar

La chuleta de manipulación

Todo lo de los capítulos 10 a 15 en una sola pantalla. Estas son las líneas que vas a repetir el resto del curso; el resto se busca cuando hace falta.

1 Elegir

df["ciudad"]
df[["ciudad", "ventas_cop"]]
df.loc[0, "ciudad"]
df.iloc[:5]

2 Filtrar

df[df["ventas_cop"] > 1000000]
df[(df["ciudad"] == "Cali") &
   (df["unidades"] >= 10)]
df[df["ciudad"].isin(["Cali"])]

3 Renombrar

df = df.rename(columns={"a": "b"})
df.columns = df.columns.str.lower()
df["ciudad"] = df["ciudad"].replace(
    {"BOGOTA": "Bogotá"})

4 Crear y quitar

df["precio"] = df["ventas_cop"] / df["unidades"]
df["precio"] = df["precio"].round(0)
df = df.drop(columns=["id_venta"])

5 Ordenar y limpiar

df = df.sort_values("ventas_cop",
                    ascending=False)
df = df.drop_duplicates()
df.isna().sum()
df = df.dropna(subset=["ventas_cop"])

6 Agrupar

df["ciudad"].value_counts()
df.groupby("ciudad")["ventas_cop"].sum()
resumen = (df.groupby("ciudad")["ventas_cop"]
             .sum().reset_index())

La regla que resume todo

Casi ningún método cambia el DataFrame: devuelven una copia. Si el resultado te importa, guárdalo — df = df.algo(...). Si el código corre y nada cambia, es casi siempre esto.

Con tu agente

Pégale df.head() y df.info() antes de pedirle nada. Con los nombres y los tipos reales delante deja de inventarse columnas que no existen.

Cambio de escenario

Ahora la IA ejecuta, no solo responde

Un agente con acceso a tu carpeta puede mover, renombrar, convertir y sobrescribir. Es potentísimo y por eso se trabaja con tres reglas.

Regla 1

Copia primero

Nunca estrenes un prompt sobre la carpeta original. Duplícala y trabaja sobre la copia. Si algo sale mal, borras la copia y ya.

Regla 2

Plan antes de ejecutar

Casi todos los prompts terminan pidiendo «muéstrame el plan y espera mi confirmación». Leer una tabla de 20 filas cuesta 30 segundos; deshacer, mucho más.

Regla 3

Verifica el resultado

Abre dos o tres archivos al azar. Un agente puede reportar «listo» y haber saltado los que tenían tildes en el nombre.

📁
Datos de trabajo Dentro van dos carpetas: carpeta_desordenada (30 archivos revueltos, ejercicios 2 a 8) y reportes_mensuales (10 Excel, ejercicio 9). El ejercicio 1 no necesita ninguna y los ejercicios 10 a 12 traen su propio archivo.
⬇ Descargar carpeta de trabajo

Los prompts de los doce ejercicios no nombran ninguna herramienta ni ninguna ruta: funcionan en cualquier agente con acceso a archivos.

Bloque 1 de 3

Empezamos por la carpeta

Antes de tocar los datos hay que poder con los archivos: crearlos, ordenarlos, convertirlos y encontrarlos. Tú escribes el prompt, el agente ejecuta — y el resultado queda en tu disco.

tu agente · escribiendo
Ordena esta carpeta por tipo de archivo
El agente te enseña el plan, lo confirmas y los 30 archivos quedan en sus subcarpetas
Bloque 1Gestionar archivos8 ejercicios · crear, ordenar, renombrar, convertir, proteger, comprimir y buscar.

En este bloque: 1 Word · 2 Ordenar · 3 Renombrar · 4 PDF · 5 Proteger · 6 Comprimir · 7 Descomprimir · 8 Buscar

Bloque 1 · Ejercicio 1 de 12

De un objetivo a un proyecto en Word

Tienes la idea en una frase; falta la estructura formal. Y esa estructura siempre es la misma.

Antes · una frase suelta
  • obj«Montar una sala de digitalización para el archivo de la entidad»
  • y nada más: ni estructura ni formato
  • sin portada ni índicea mano
  • sin estudio financieroa mano
  • sin cronograma ni riesgosa mano
el agente
Después · documento formal.docx
  • 📄 PROYECTO_INVERSION.docx 10 secciones
    • 1-3Portada · resumen · justificación
    • 4-6Objetivos · mercado · técnico
    • 7-8Financiero (VPN, TIR) · riesgos
    • 9-10Cronograma · conclusiones
  • estilos de Word, índice automático y numeración
Prompt · ajústalo antes de copiarlo ✎ Cambia lo resaltado
Trabaja en la carpeta de trabajo actual. Objetivo del proyecto: «montar una sala de digitalización para el archivo central de la entidad». Contexto: entidad pública, inversión estimada de $400 millones, horizonte de 3 años. Genera un Word (.docx) llamado PROYECTO_INVERSION.docx con esta estructura: portada · resumen ejecutivo · antecedentes y justificación · objetivo general y específicos · estudio de mercado · estudio técnico · estudio financiero (inversión, costos, ingresos, flujo de caja, VPN y TIR) · análisis de riesgos · cronograma · conclusiones. Formato profesional: títulos con los estilos Título 1 y Título 2 de Word, texto justificado, tablas con fila de encabezado, numeración de páginas e índice automático al inicio. No inventes cifras como si fueran reales: marca cada una con [SUPUESTO] y déjame al final la lista de todo lo que debo reemplazar con datos verdaderos.
Bloque 1 · Ejercicio 2 de 12

Ordenar la carpeta por tipo de archivo

Todo mezclado en un solo nivel. Que el agente cree las subcarpetas y mueva cada archivo a la suya.

Antes · todo revuelto\carpeta_desordenada
  • pdfinforme final_2 (copia).pdf
  • docxacta reuNIon 12 de MARSO.docx
  • xlsxpresupuesto 2026.xlsx
  • jpegWhatsApp Image 2026-02-18.jpeg
  • pdfPOLIZA cumplimiento 2026.pdf
  • txtpendientes semana.txt
  • ziprespaldo documentos.zip
  • …y 23 archivos más, en el mismo montón
el agente
Después · por tipo\carpeta_desordenada
  • 📁 PDF 8 archivos
  • 📁 WORD 6 archivos
  • 📁 EXCEL 4 archivos
  • 📁 IMAGENES 6 archivos
  • 📁 TEXTO 3 archivos
  • 📁 OTROS 3 archivos
  • 30 de 30 · nada se borró: todo se movió
Prompt · ajústalo antes de copiarlo ✎ Cambia lo resaltado
Trabaja sobre los archivos de la carpeta de trabajo actual. Organiza los archivos en subcarpetas según su tipo: PDF, WORD, EXCEL, IMAGENES, TEXTO y OTROS (lo que no encaje en las anteriores). Reglas: - Mueve los archivos, no los copies ni los borres. - Crea la subcarpeta solo si hay al menos un archivo de ese tipo. - Si un nombre ya existe en el destino, añade el sufijo _1, _2 en vez de sobrescribir. Muéstrame primero el plan (archivo → carpeta destino) y espera mi confirmación. Al terminar, dame una tabla: subcarpeta | cantidad de archivos.
Bloque 1 · Ejercicio 3 de 12

Renombrar todo a un mismo criterio

Mayúsculas y minúsculas mezcladas, tildes, «copia (2)» y faltas de ortografía. Una sola pasada y quedan homogéneos.

Antes · cada uno a su manera
  • docxacta reuNIon 12 de MARSO.docxfalta
  • pdfinforme final_2 (copia).pdfcopia
  • pdfresumen-EJECUTIVO(1).pdfcopia
  • xlsxpresupuesto 2026.xlsxespacios
  • pngIMG_20240912.pngopaco
  • txtnotas rapidas sesion.txttildes
el agente
Después · un solo formato
  • docxACTA_REUNION_12_DE_MARZO.docx
  • pdfINFORME_FINAL_2.pdf
  • pdfRESUMEN_EJECUTIVO.pdf
  • xlsxPRESUPUESTO_2026.xlsx
  • pngIMG_20240912.png
  • txtNOTAS_RAPIDAS_SESION.txt
Prompt · ajústalo antes de copiarlo ✎ Cambia lo resaltado
Trabaja sobre los archivos de la carpeta de trabajo actual. Renombra TODOS los archivos que contiene con este criterio: - El nombre completo en MAYÚSCULAS; la extensión en minúsculas. - Sin tildes ni caracteres especiales; los espacios se vuelven guion bajo. - Corrige las faltas de ortografía evidentes (MARSO → MARZO, REUNION queda igual). - Elimina del nombre los sufijos de duplicado: "copia", "(1)", "- copia (2)". No borres, no muevas y no modifiques el contenido de ningún archivo. Si al limpiar el nombre dos archivos quedan iguales, añade _1, _2 al final. Muéstrame primero una tabla: nombre actual | nombre nuevo. Espera mi visto bueno.
Bloque 1 · Ejercicio 4 de 12

Convertir Word e imágenes a PDF

Lo que se envía fuera de la organización va en PDF. Convertir doce archivos a mano son doce «Guardar como»; con el agente es un párrafo.

Antes · formatos mezclados
  • docxACTA_REUNION_12_DE_MARZO.docx
  • docxCARTA_PROVEEDOR.docx
  • docxMEMORANDO_INTERNO.docx
  • pngIMG_20240912.png
  • pngFIRMA_ESCANEADA.png
  • …y 7 más entre Word e imágenes · los .pdf se saltan
el agente
Después · originales + carpeta PDF
  • 📁 PDF_CONVERTIDOS 12 nuevos
    • pdfACTA_REUNION_12_DE_MARZO.pdf
    • pdfCARTA_PROVEEDOR.pdf
    • pdfMEMORANDO_INTERNO.pdf
    • …y 9 más · 6 Word + 6 imágenes = 12
  • los .docx y las imágenes siguen donde estaban
Prompt · ajústalo antes de copiarlo ✎ Cambia lo resaltado
Trabaja sobre los archivos de la carpeta de trabajo actual. Convierte a PDF todos los archivos de Word (.docx, .doc) y todas las imágenes (.png, .jpg, .jpeg) que encuentres. Reglas: - Guarda los PDF en una subcarpeta nueva llamada PDF_CONVERTIDOS. - Conserva el nombre original, cambiando solo la extensión. - No elimines ni modifiques los archivos de origen. - Una imagen = una página tamaño carta, centrada y sin deformar la proporción. Si te falta alguna librería para hacerlo, instálala y continúa. Al terminar dime: cuántos convertiste y cuáles no pudiste, con el motivo de cada uno.
Bloque 1 · Ejercicio 5 de 12

Poner clave a todos los PDF

Documentos con datos de terceros que salen por correo. Proteger uno es fácil; proteger veinte, uno por uno, es donde se abandona.

Antes · abiertos para cualquiera\PDF_CONVERTIDOS
  • pdfACTA_REUNION_12_DE_MARZO.pdfsin clave
  • pdfCARTA_PROVEEDOR.pdfsin clave
  • pdfMEMORANDO_INTERNO.pdfsin clave
  • pdfIMG_20240912.pdfsin clave
  • …y 8 más · los 12 salieron del ejercicio 4
el agente
Después · copia protegida\PDF_PROTEGIDOS
  • pdfACTA_REUNION_12_DE_MARZO_CLAVE.pdf🔒
  • pdfCARTA_PROVEEDOR_CLAVE.pdf🔒
  • pdfMEMORANDO_INTERNO_CLAVE.pdf🔒
  • pdfIMG_20240912_CLAVE.pdf🔒
  • 12 de 12 · los originales siguen sin tocar
Prompt · ajústalo antes de copiarlo ✎ Cambia lo resaltado
Trabaja sobre la subcarpeta PDF_CONVERTIDOS de la carpeta de trabajo actual. Protege con contraseña todos los archivos PDF que haya allí. Reglas: - Contraseña de apertura: Taller2026* - Guarda los archivos protegidos en una subcarpeta PDF_PROTEGIDOS, con el mismo nombre más el sufijo _CLAVE. - No modifiques, no muevas y no borres los PDF originales. Al terminar, comprueba abriendo uno de los protegidos que efectivamente pide la clave, y dame la lista de los que quedaron protegidos.
Bloque 1 · Ejercicio 6 de 12

Ocho carpetas en un solo archivo

La carpeta ya está ordenada, pero enviarla sigue siendo adjuntar carpeta por carpeta. Un comprimido y va todo de una vez, con la estructura intacta.

Antes · ocho carpetas sueltas\carpeta de trabajo
  • 📁 PDF 8 archivos
  • 📁 WORD 6 archivos
  • 📁 EXCEL 4 archivos
  • 📁 IMAGENES 6 archivos
  • 📁 PDF_CONVERTIDOS 12 archivos
  • …y TEXTO, OTROS y PDF_PROTEGIDOS
  • nada que adjuntar de una sola veza mano
el agente
Después · un único paquete\carpeta de trabajo
  • zipcomprimido.zip54 archivos
  • dentro van las ocho carpetas, con su jerarquía
  • estPDF\ · WORD\ · EXCEL\ · IMAGENES\ …
  • oklas carpetas originales, sin tocar
  • un solo adjunto en vez de ocho
Prompt · ajústalo antes de copiarlo ✎ Cambia lo resaltado
Trabaja en la carpeta de trabajo actual. Comprime en un único archivo llamado comprimido.zip todas las subcarpetas que haya allí, con todo su contenido. Reglas: - Conserva dentro del zip la misma estructura de carpetas. - Incluye solo las carpetas: los archivos sueltos de la raíz quedan fuera. - No muevas, no renombres y no borres nada de lo original. - No metas el propio comprimido.zip dentro de sí mismo. Muéstrame primero el plan (qué carpetas vas a incluir) y espera mi confirmación. Al terminar dime: cuántos archivos entraron y el tamaño final del zip.
Bloque 1 · Ejercicio 7 de 12

Abrirlo y comprobar que está todo

Descomprimir es un doble clic. Lo que nadie hace es contar si salió lo mismo que entró — y ahí es donde se pierden archivos sin enterarse.

Antes · una caja cerrada\carpeta de trabajo
  • zipcomprimido.zip54 archivos
  • un solo archivo, ocho carpetas dentro
  • ?¿llegó completo o falta algo?a ciegas
  • extraer encima y pisar lo que ya estáriesgo
  • abrir y contar a mano son 54 comprobaciones
el agente
Después · restaurado y contado\comprimido_extraido
  • 📁 PDF 8 archivos
  • 📁 WORD 6 archivos
  • 📁 EXCEL 4 archivos
  • …y las otras cinco carpetas, igual que en el zip
  • ok54 de 54 · no falta ningunoíntegro
Prompt · ajústalo antes de copiarlo ✎ Cambia lo resaltado
Trabaja en la carpeta de trabajo actual. Descomprime comprimido.zip dentro de una subcarpeta nueva llamada comprimido_extraido. Reglas: - Conserva la estructura de carpetas tal como viene dentro del zip. - No extraigas nada fuera de comprimido_extraido: no sobrescribas las carpetas que ya existen en la raíz. - Si comprimido_extraido ya existe y tiene contenido, avísame antes de tocarla. Al terminar compara el zip con lo extraído y dime: cuántos archivos traía, cuántos salieron y si falta o sobra alguno.
Bloque 1 · Ejercicio 8 de 12

¿Dónde quedó el informe final?

Sabes que está, pero no en cuál de las ocho carpetas. Y casi siempre no hay una copia: hay tres, y ninguna se llama igual.

Antes · ¿en cuál de las ocho?\carpeta de trabajo
  • 📁 PDF 8 archivos
  • 📁 WORD 6 archivos
  • 📁 PDF_CONVERTIDOS 12 archivos
  • 📁 PDF_PROTEGIDOS 12 archivos
  • …y cuatro carpetas más, con subcarpetas dentro
  • ?«el informe final» — abrir carpeta por carpetaa ojo
el agente
Después · las tres copias, con su ruta
  • pdf\PDF\informe final_2 (copia).pdf1,8 MB
  • pdf\PDF_CONVERTIDOS\INFORME_FINAL.pdf2,1 MB
  • pdf\PDF_PROTEGIDOS\INFORME_FINAL_CLAVE.pdf🔒
  • la más reciente: la de PDF_CONVERTIDOS
  • nada se movió ni se abrió: solo te dice dónde está
Prompt · ajústalo antes de copiarlo ✎ Cambia lo resaltado
Busca en la carpeta de trabajo actual y en todas sus subcarpetas, a cualquier profundidad. Encuéntrame todos los archivos cuyo nombre contenga «informe final». Reglas: - Ignora mayúsculas, tildes, guiones bajos y espacios: «INFORME_FINAL», «informe final» e «Informe-Final» son lo mismo. - No abras, no muevas, no renombres y no borres nada: solo localizar. Dame una tabla con: ruta completa | nombre | tamaño | fecha de modificación. Al final dime cuál es la más reciente y si alguna copia es idéntica a otra.
Bloque 2 de 3

Ahora entramos en los datos

Hasta aquí el agente movía archivos sin mirar dentro. En este bloque los abre: junta tablas, corrige lo que viene sucio y genera los reportes por su cuenta. Ya no ordenas la carpeta: trabajas los datos.

Bloque 1Gestionar archivos8 ejercicios · crear, ordenar, convertir, comprimir y buscar.
Bloque 2Manipular archivos3 ejercicios · consolidar, limpiar y automatizar lo que hay dentro.

En este bloque: 9 Consolidar · 10 Limpieza · 11 Automatización — los tres sobre archivos de Excel reales.

EJERCICIO 9 Bloque 2 · Consolidar Excel

Diez Excel iguales, un solo archivo

Sobre reportes_mensuales · diez libros con las mismas columnas
📁 reportes_mensuales · los diez libros del reporte ⬇ Abrir carpeta
El prompt
Los archivos de Excel de reportes_mensuales tienen la misma estructura de columnas. Consolídalos en un solo archivo llamado CONSOLIDADO.xlsx: (1) una sola fila de encabezados al inicio, no una por archivo; (2) añade una columna ORIGEN con el nombre del archivo del que salió cada fila; (3) no cambies los datos —no redondees, no reordenes columnas, no borres filas— y respeta el formato de fecha y de número. Antes de escribir nada, verifica que las columnas coincidan en todos los archivos y avísame si alguno difiere. Al final dime el total de filas y cuántas aportó cada archivo.
Cambia la carpeta por la tuya.
Qué obtienes
📁 reportes_mensuales/
📄 REPORTE_2026_01.xlsx 312
📄 REPORTE_2026_02.xlsx 288
📄 REPORTE_2026_03.xlsx 341
📄 … +7 archivos
consolida
📗
CONSOLIDADO.xlsx
3.104 filas
1 encabezado, no 10+ columna ORIGENdatos sin tocar
💡 Trazable: con la columna ORIGEN siempre sabes de qué libro salió cada fila — y por eso puedes fiarte del consolidado.
EJERCICIO 10 Bloque 2 · Limpieza de datos

De datos sucios a datos listos

Úsalo en cualquiera de los 4 agentes · sobre datos_ventas.xlsx
📊 datos_ventas.xlsx · los datos sin limpiar ⬇ Descargar
El prompt
Carga datos_ventas.xlsx en un DataFrame llamado datos. Límpialo: (1) elimina filas duplicadas; (2) en ciudad y categoria quita espacios y unifica mayúsculas/acentos; (3) convierte cantidad, precio_unitario y total_venta a número (quita "$" y puntos de miles); (4) recalcula total_venta = cantidad × precio_unitario donde falte; (5) elimina filas con cantidad ≤ 0; (6) rellena satisfaccion vacía con la mediana. Guárdalo como datos_ventas_limpio.xlsx.
Edita los recuadros con tus columnas.
Qué obtienes
Antes
BOGOTA $ 295.200
bogota
Bogotá4200
Medellin -2
Después
Bogotá295200
Bogotá180000
Bogotá4200
Medellín✓ válida
162 → 153 filas0 duplicados0 nulostipos correctos
💡 La base de todo: sin datos limpios, los gráficos y reportes mienten.
EJERCICIO 11 Bloque 2 · Automatización de Excel

Un proceso que genera archivos solo

Sobre datos_ventas_limpio.xlsx · genera varios .xlsx automáticamente
📊 datos_ventas.xlsx · el de partida, si no hiciste el ejercicio 1 ⬇ Descargar
El prompt
Con datos_ventas_limpio.xlsx: (1) crea la carpeta reportes_por_ciudad y guarda un Excel por cada ciudad (ventas_<ciudad>.xlsx); (2) crea un único resumen_ventas.xlsx con una hoja por cada categoria y una hoja Resumen con total_venta y utilidad por ciudad.
Cambia la columna para separar.
Qué obtienes
📊
datos_ventas_limpio.xlsx
153 filas
automatiza
📁 reportes_por_ciudad/
📄 ventas_Bucaramanga.xlsx 37
📄 ventas_Medellín.xlsx 34
📄 ventas_Bogotá.xlsx 29
📄 … +2 ciudades
📗 resumen_ventas.xlsx
TecnologíaHogarRopaDeportesAlimentosResumen
💡 Automatización real: el agente recorre cada categoría y escribe su archivo. Sin copiar-pegar.
Bloque 3 de 3

El agente se muda dentro

En los once ejercicios anteriores el agente estaba en otra ventana y tú le pasabas la carpeta. Aquí vive dentro de Excel: ve la hoja que tienes abierta y escribe sobre ella.

Bloque 1Gestionar archivos8 ejercicios · crear, ordenar, convertir, comprimir y buscar.
Bloque 2Manipular archivos3 ejercicios · consolidar, limpiar y automatizar.
Bloque 3Agente en el programa1 ejercicio · cruzar dos hojas sin salir de la aplicación.

En este bloque: 12 Agente en Excel — el mismo tipo de encargo, pero sin cambiar de ventana.

EJERCICIO 12 Bloque 3 · Agente dentro de una app

Un agente dentro de Excel

Con Claude Code integrado en Excel · el agente lee y escribe sobre la hoja abierta
📊 preinscritos.xlsx · hojas «curso» y «taller» ⬇ Descargar
X preinscritos.xlsx
Xcurso3 personas
#nombrecorreo
1Ana Gómezana@mail.com
2Carlos Ríoscarlos@mail.com
3María Ruizmaria@mail.com
Xtaller+ columna nueva ✦
#nombrecorreoestado ✦
1Ana Gómezana@mail.comTaller + curso
2Luis Páezluis@mail.comSolo taller
3María Ruizmaria@mail.comTaller + curso
4Luis Páez 🔁luis@mail.comSolo taller
verde = está en ambas hojas 🔁 fila duplicada ✦ lo que agrega el agente
◧ curso ◧ taller
💡 La diferencia del bloque 3: no exportas, no abres otra ventana y no indicas rutas — le hablas al programa que ya tienes delante.
Fin del módulo 2

El ciclo completo

Abrir cualquier formato, entender lo que llegó, trabajarlo dentro del DataFrame y devolverlo al disco. Eso es, entero, un flujo de datos profesional.

Lo que viste

Cargar y exportar

Los cuatro formatos con los que te van a entregar los datos, y los cuatro de vuelta.

  • read_csv · read_excel · read_file
  • to_csv · to_excel · to_file
  • rutas, carpetas y varias hojas
Lo que viste

Manipular

Todo lo que pasa dentro de la tabla antes de volver a guardarla.

  • elegir, filtrar y renombrar
  • crear columnas y limpiar
  • agrupar y resumir
Lo que sigue

Módulo 3

Con los archivos ya bajo control, el siguiente paso es cruzarlos y mostrarlos.

  • unir varios archivos en una tabla
  • graficar lo que resumiste

Los doce ejercicios siguen ahí

Tres bloques: gestionar archivos (1 a 8), manipular archivos (9 a 11) y el agente dentro del programa (12). Los prompts quedan editables en cada diapositiva: vuelve, cámbialos por los tuyos y cópialos.

La regla que no cambia

Copia primero, pide el plan antes de ejecutar y verifica el resultado. Con eso el agente deja de ser un riesgo y pasa a ser una herramienta de trabajo.

Trabajo Científico · @TCientifico · Democratizando la ciencia de datos