Esta semana es fundamental, ya que Pandas es la herramienta número uno en el mundo laboral para la manipulación y análisis de datos tabulares. Pasar de arreglos de NumPy a DataFrames de Pandas les dará a los estudiantes la sensación de estar programando su propio “Excel” con esteroides.

He estructurado la guía manteniendo los ejemplos enfocados en la ingeniería (mezclando resistencia de materiales y porcentajes de humedad para conectar con los programas de Civil, Agrícola y Agroindustrial de la Universidad de Sucre). Además, diseñé el código para que sea ejecutable inmediatamente sin necesidad de subir archivos externos, pero enseñando la lógica de cómo se haría.

Aquí tienes el contenido completamente limpio para la Semana 10:


Celda 1: Texto (Markdown)

# SEMANA 10: Manipulación de Datos con Pandas

**Asignatura:** Programación de Computadores con Python
**Programas:** Ingeniería Agrícola, Civil y Agroindustrial

La semana pasada aprendimos a realizar cálculos masivos con NumPy y a graficarlos con Matplotlib. Sin embargo, en la vida real, los datos rara vez vienen como simples listas de números; usualmente trabajamos con tablas complejas que contienen texto, fechas y diferentes tipos de mediciones numéricas (como las hojas de cálculo de Excel).

Para dominar este tipo de información, utilizaremos **Pandas**, la librería estándar de la industria para el análisis de datos.

**Objetivos de Aprendizaje:**
* Comprender el concepto de *DataFrame* y *Series* en Pandas.
* Crear DataFrames a partir de diccionarios y entender cómo cargar archivos CSV.
* Filtrar bases de datos según condiciones lógicas de ingeniería.
* Agrupar datos y obtener estadísticas descriptivas (promedios, máximos, mínimos) de forma automatizada.

Celda 2: Texto (Markdown)

## SESIÓN 1: Introducción a los DataFrames

**¿Qué es Pandas?**
Pandas es una librería de Python que nos permite leer, limpiar, filtrar y analizar datos estructurados.  Su estructura principal es el **DataFrame**, que puedes imaginar como una tabla de Excel con filas y columnas, pero que podemos manipular mediante código a una velocidad increíble.

Por convención universal, Pandas se importa con el apodo `pd`.

### Creando nuestro primer DataFrame
Normalmente, leeríamos los datos desde un archivo externo (como los registros de un datalogger), pero para entender su estructura, vamos a crear un DataFrame manualmente con datos que simulan ensayos de laboratorio.

Celda 3: Código (Python)

import pandas as pd

# 1. Creamos un diccionario con nuestros datos de ingeniería
datos_laboratorio = {
    "Muestra_ID": ["M-01", "M-02", "M-03", "M-04", "M-05"],
    "Tipo_Material": ["Concreto", "Madera", "Suelo", "Concreto", "Suelo"],
    "Resistencia_MPa": [25.4, 12.5, 0.0, 28.1, 0.0],
    "Humedad_Porcentaje": [5.2, 15.0, 35.5, 4.8, 42.1]
}

# 2. Convertimos el diccionario en un DataFrame de Pandas
df = pd.DataFrame(datos_laboratorio)

# 3. Mostramos la tabla (En Colab, solo escribir 'df' al final muestra una tabla interactiva muy visual)
df

Celda 4: Texto (Markdown)

### ¿Cómo cargaríamos un archivo real?
En un proyecto real de ingeniería (como el proyecto final), tus datos estarán en un archivo de Excel o CSV. Para cargarlos a Python, simplemente usaríamos una línea de código como esta:

`df_real = pd.read_csv("mis_datos_de_campo.csv")`

Una vez cargada la tabla, Pandas nos ofrece herramientas para inspeccionarla rápidamente. Ejecuta la siguiente celda para ver un resumen estadístico automático de nuestras muestras.

Celda 5: Código (Python)

# Muestra estadísticas descriptivas (conteo, promedio, desviación estándar, min, max) 
# de todas las columnas numéricas.
df.describe()

Celda 6: Texto (Markdown)

---
## SESIÓN 2: Filtrado y Agrupación de Datos

Tener los datos en una tabla no es suficiente; el trabajo del ingeniero es extraer información útil. 

### 1. Filtrado Lógico
Imagina que esta tabla tiene 10,000 registros y solo te interesan las muestras de "Concreto" que superaron los 25 MPa de resistencia. Con Pandas, podemos filtrar esto con una simple condición lógica.

Celda 7: Código (Python)

# Filtramos el DataFrame buscando una condición específica
filtro_concreto = df[(df["Tipo_Material"] == "Concreto") & (df["Resistencia_MPa"] > 25.0)]

print("Muestras de concreto de alta resistencia:")
# Mostramos el resultado del filtro
filtro_concreto

Celda 8: Texto (Markdown)

### 2. Agrupación (GroupBy)
El método `.groupby()` es probablemente la herramienta más poderosa de Pandas. Nos permite agrupar la tabla por categorías y calcular estadísticas para cada grupo. 

Vamos a agrupar nuestras muestras por "Tipo_Material" para descubrir cuál es la humedad promedio de cada uno.

Celda 9: Código (Python)

# Agrupamos por material y calculamos el promedio (mean) de las demás columnas
promedios_por_material = df.groupby("Tipo_Material").mean(numeric_only=True)

print("Promedios calculados por tipo de material:")
promedios_por_material

Celda 10: Texto (Markdown)

---
### Interacción con el Tutor IA 🤖

Pandas tiene cientos de funciones útiles. Vamos a pedirle a nuestro asistente que nos explique cómo lidiar con el problema más común en la ingeniería de datos: los datos faltantes o corruptos.

> **PROMPT DE APRENDIZAJE - SEMANA 10:**
> Actúa como un Analista de Datos experto en proyectos de ingeniería. Estoy aprendiendo a usar Pandas en Python.
> 1) Explícame la diferencia entre una "Series" y un "DataFrame" en Pandas.
> 2) Cuando importo datos de sensores reales usando `pd.read_csv()`, es común que falten algunos valores (aparecen como NaN). Explícame qué son los valores NaN y presenta 2 métodos de Pandas para limpiarlos o rellenarlos (ej. dropna o fillna).
> 3) Explica qué hace exactamente la función `df.groupby()` usando una analogía sencilla.
> Después hazme 3 preguntas para verificar si comprendí los conceptos de limpieza y manipulación de datos con Pandas.

Celda 11: Texto (Markdown)

---
## ACTIVIDAD FINAL: Hoja "Estudia y Aprende"

Sintetiza lo aprendido hoy con el prompt global de la asignatura:

> **PROMPT GLOBAL DE CIERRE:**
> Actúa como tutor experto en Ciencia de Datos con Python. Elabora un RESUMEN BREVE que cumpla estas condiciones:
> 1. Debe caber en UNA SOLA HOJA escrita a mano.
> 2. Lenguaje claro, técnico y aplicado a la ingeniería.
> 3. Debe incluir: El concepto de DataFrame en Pandas, para qué sirve la función `pd.read_csv()`, la utilidad del filtrado lógico y de la función `groupby()`.
> 4. Pensado para que yo lo escriba comprendiendo lo esencial.
> Al final agrega una frase de reflexión sobre la importancia de saber organizar y analizar grandes volúmenes de datos en la toma de decisiones.

**Instrucción para el estudiante:** En el reverso de tu hoja, escribe a mano el código necesario para crear un filtro en Pandas que seleccione únicamente los datos donde la variable `Humedad_Porcentaje` sea menor a 10.0.

Con esto, los estudiantes ya tendrán el ciclo lógico, matemático y de manipulación de datos completamente cubierto.