Introducción a Python#

🎯 Objetivos de la sesión#

Al finalizar, el estudiante podrá:

  • ✅ Reconocer el entorno de trabajo (Jupyter Notebook y sandbox) y entender cómo afecta el estado del kernel y el orden de ejecución.

  • ✅ Explicar y usar fundamentos de Python: variables, tipos de datos (int, float, str, bool), operaciones y formateo de strings.

  • ✅ Describir qué es Pandas y diferenciar DataFrame vs Series vs índice.

  • ✅ Realizar una exploración inicial de un dataset con Pandas usando:

    • .head(), .tail(), .sample(), .info(), .describe(), .shape

    • .columns, .dtypes

    • .unique(), .nunique(), .value_counts()


🧭 Agenda de la sesión#

  1. Introducción a Python + code with me - 50 mins

  2. Break - 10 mins

  3. Introducción a Pandas + code with me - 40 mins

Por qué Python?#

Python es un lenguaje de programación de alto nivel, interpretado y de propósito general.

Es ampliamente utilizado en diversas áreas como el análisis de datos, desarrollo web, inteligencia artificial, automatización y más.

  • ✅ Sintaxis simple y legible

  • ✅ Multiparadigma

  • ✅ Lenguaje interpretado: Se ejecuta linea por linea

  • ✅ Extensa librería estándar

  • ✅ Gran comunidad

📓 Jupyter Notebooks y Sandbox#

📓 Jupyter Notebook#

  • Funciona por celdas:

    • Code: ejecuta Python.

    • Markdown: texto con formato.

  • El kernel es el proceso que ejecuta tu código:

    • Si lo reinicias, se pierde el estado (variables, imports, etc.).

  • El orden importa: si ejecutas celdas “fuera de secuencia”, puedes generar resultados inconsistentes.

🧪 Sandbox (plataforma)#

  • Entorno controlado para practicar/entregar.

  • Suele incluir archivos del proyecto, validaciones y un flujo de “run / submit”.

  • Regla de oro: leer el error y ubicar línea + causa.

image.png

Variables, Tipos de Datos y Operaciones Aritméticas#

🧩 Variables#

  • Una variable es un nombre que apunta a un valor.

  • Sirven para almacenar resultados, reutilizarlos y darles significado (hacer el código legible).

  • En Python, el tipo no se declara explícitamente en la variable: el tipo lo determina el valor asignado.

  • Buenas prácticas:

    • Nombres descriptivos (que expliquen qué representan).

    • Consistencia en estilo (habitualmente snake_case).

    • Evitar nombres ambiguos o demasiado cortos que no comuniquen intención.

Variables y Print#

print("Hola Mundo")

print('Hola Mundo')
Hola Mundo
Hola Mundo
print("Hola Mundo")
print ('Hola Mundo')
Hola Mundo
Hola Mundo

variable.png

  • Los nombres de las variables solo pueden empezar por letras o por el carácter de guion bajo _.

  • Los nombres de las variables solo pueden contener letras, números y guiones bajos; otros caracteres especiales no están permitidos.

variable = 'Este es mi texto'

print(variable)
Este es mi texto
variable = 'Este es mi texto'
print(variable)
variable = 'Este es mi otro texto'
print(variable)  #El nuevo valor de variable, el anterior se perdió
Este es mi texto
Este es mi otro texto
variable1 = 'Este es mi texto'

print(variable1)

variable2 = 'Este es mi otro texto'
print(variable2)

print(variable1) #Se conserva cada variable por separado

print(variable1 , variable2)
Este es mi texto
Este es mi otro texto
Este es mi texto
Este es mi texto Este es mi otro texto
nombre = 'Pedro'  # Variable de tipo String (str)
Apellido = 'Fuentes'
edad = 87 # Variable de tipo Entero (int)
altura = 1.50 # Variable de tipo punto flotante (float)
is_single= False  # Variable Booleana True/False (Bool)

print('nombre:', nombre)
print('Apellido:', Apellido)
print('edad:', edad)
print('altura:', altura)
print('is_single:', is_single)

print("Su nombre es ", nombre, "tiene ", edad, "años,", "mide", altura, ". ¿Esta soltera? ", is_single)
nombre: Pedro
Apellido: Fuentes
edad: 87
altura: 1.5
is_single: False
Su nombre es  Pedro tiene  87 años, mide 1.5 . ¿Esta soltera?  False
ciudad= "Buenos aires"
print("la edad del usuario es", edad, "y vive en:", ciudad)
la edad del usuario es 87 y vive en: Buenos aires

➕ Operaciones#

Las operaciones son acciones que combinan o transforman valores. Lo esencial es que el resultado depende de:

  • El operador (suma, resta, comparación, etc.).

  • Los tipos de datos involucrados.

Operaciones aritméticas#

Se aplican a números y producen resultados numéricos. Algunas operaciones pueden devolver decimales aunque los operandos sean enteros (depende del operador).

Operaciones de comparación#

Comparan dos valores y devuelven un valor booleano: verdadero o falso.

Operaciones lógicas#

Combinan valores booleanos para construir condiciones más complejas.

image.png

print(1+1.5)
print(2.8-1)
print(3.5*2)
print(4/2)
print(5%2) #El residuo de la división por la parte entera
print(6**2)
print(7//2) #Redondea a ala baja
2.5
1.7999999999999998
7.0
2.0
1
36
3
var1 =3
var2 =4.6

print(var1+var2)
print(var1-var2)
print(var1*var2)
print(var1/var2)
print(var1%var2)
print(var1**var2)
print(var1//var2)
7.6
-1.5999999999999996
13.799999999999999
0.6521739130434783
3.0
156.58774563947273
0.0

Orden de las operaciones#

  • Exponentes.

  • Multiplicaciones y divisiones.

  • Sumas y restas.

a=5
b=7
c=3

print(a+b*c)
print((a+b)*c)

print(a**c+b*a-8)  #125+35-8
print(a**(c+b)*(a-8)) # 5**10 * -3
26
36
152
-29296875

🧱 Tipos de datos esenciales#

Los tipos de datos indican qué clase de información estás manejando y qué operaciones tienen sentido.

  • Enteros (int): números sin parte decimal.

  • Decimales (float): números con parte decimal.

  • Texto (str): cadenas de caracteres (letras, símbolos, números como texto).

  • Booleanos (bool): valores lógicos (verdadero/falso).

Por qué importan: el tipo define cómo se comporta un valor al operar con otros (por ejemplo, sumar números no es lo mismo que combinar textos).

edad=float(24)
print(edad)
24.0
#¿Recuerdas los tipos de datos?
nombre = 'Ana'
Apellido = 'Fuentes'
edad = 24
altura = 1.50
is_single= False

print(type(nombre)) #Función dentro de otra función
print(type(Apellido))
print(type(edad))
print(type(altura))
print(type(is_single))

#Guardamos el resultado de una función en una variable

a = type(edad)

#lo imprimimos
print("El tipo de dato de edad es: ", a)
<class 'str'>
<class 'str'>
<class 'int'>
<class 'float'>
<class 'bool'>
El tipo de dato de edad es:  <class 'int'>
#¿Que pasa si operamos entre ellos?

#print(nombre + Apellido)
#print(nombre + Apellido + edad)
#print(nombre+ Apellido + str(edad))

🔄 Conversión de tipos (casting)#

Convertir tipos es transformar un dato de un tipo a otro (por ejemplo, texto a número).

  • Se usa cuando los datos vienen en un formato diferente al que necesitas (muy común con entradas de usuario, archivos, APIs).

  • No siempre es posible: si el contenido no representa algo convertible, ocurre un error.

  • Idea clave: antes de operar, asegúrate de que los datos estén en el tipo correcto.

#Conversiones

#print("Oscar" * "Alma")
print("Oscar" + "Alma")

#print("Oscar" - "Alma")
print("Oscar" , "Alma")

#print("Oscar" + False)
print("Oscar" + str(False))

#print("Oscar" * 2.5)
print("Oscar" * int(2.5))
OscarAlma
Oscar Alma
OscarFalse
OscarOscar
#Más ejemplos
print(float(True))
print(float(False))

print(int(True))
print(int(False))

print(str(True))
print(str(False))

print("Oscar" + str(True))
print("Oscar" * int(True)) # Y si fuera False?
print("Oscar" * int(2.5))
1.0
0.0
1
0
True
False
OscarTrue
Oscar
OscarOscar
#Cuidado con:

a="1987" #Almacenado como String
b= 2345

print(a+b)

c= "El perro"

print(b+c)
print(b+int(c))

print(a+c)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[16], line 6
      3 a="1987" #Almacenado como String
      4 b= 2345
----> 6 print(a+b)
      8 c= "El perro"
     10 print(b+c)

TypeError: can only concatenate str (not "int") to str

🧵 Strings (texto)#

Un string es una secuencia de caracteres. Conceptos básicos:

  • Longitud: cantidad de caracteres.

  • Indexación: acceder a un carácter por posición.

  • Inmutabilidad: no se “edita” un string en el lugar; se crean nuevos strings.

  • Concatenación: unir textos para formar uno nuevo.

mytexto= "Esto es un string"

mytexto2= 'Esto es un string'

print(mytexto)
print(mytexto2)
Esto es un string
Esto es un string
mytexto = """Este es un string
con varias lineas"""

print(mytexto)
print("----------")
mytexto = "Este tambien es un \n string con \nvarias lineas"
print(mytexto)
Este es un string
con varias lineas
----------
Este tambien es un 
 string con 
varias lineas
mytexto = "Este es\t \t un string con\t tabulaciones \t\t."
print(mytexto)
Este es	 	 un string con	 tabulaciones 		.

✨ Formateo de strings#

El formateo de strings es insertar valores dentro de texto de forma controlada y legible.

  • Permite construir mensajes, reportes y salidas con variables dentro.

  • También permite controlar la presentación de números (por ejemplo, decimales, separadores, porcentajes).

  • En Python moderno, la forma recomendada es el formateo directo dentro del string (f-strings), por claridad y facilidad de lectura.

nombre= "Gina"
apellido = "Buvoli"
ciudad = "Barranquilla"

print("Mi nombre es:",nombre, Apellido, "y vivo en:",ciudad)
Mi nombre es: Gina Buvoli y vivo en: Barranquilla

F-Strings#

image.png

nombre= "Gina"
apellido = "Buvoli"
ciudad = "Barranquilla"

print(f"Mi nombre es {nombre} {apellido} y vivo en {ciudad}")

producto= "Arroz"
precio= 356
descuento = 10

print(f"El precio del {producto} es ${precio}, con el descuento aplicado le queda en ${precio*(1- descuento/100)}")
Mi nombre es Gina Buvoli y vivo en Barranquilla
El precio del Arroz es $356, con el descuento aplicado le queda en $320.40000000000003

Actividad Práctica#

a = 5
b = 3
resultado = #####
print(# La suma de a + b es: Respuesta)
x = 4
y = "2"
producto = #####
print(#El resultado de la multiplicación es)

Problema

Juan tiene 35 años y planea retirarse a los 65 años. Actualmente, ahorra 300 dólares cada mes.

Si mantiene este ritmo de ahorro hasta su edad de retiro:

Calcula cuántos años le faltan para jubilarse. Convierte los años faltantes a meses. Calcula cuánto dinero habrá ahorrado en total. Muestra los resultados concatenando las variables en print, sin usar formato especial.

# Datos del problema
edad_actual = "35"  # Edad de Juan como cadena de texto
edad_retiro = "65"  # Edad de retiro como cadena de texto
ahorro_mensual = "300"  # Ahorro mensual como cadena de texto

# Conversión de variables
edad_actual = int(edad_actual)
edad_retiro = int(edad_retiro)
ahorro_mensual = int(ahorro_mensual)

# Cálculos
anos_faltantes = edad_retiro - edad_actual
meses_faltantes = anos_faltantes * 12
total_ahorrado = meses_faltantes * ahorro_mensual

# Mostrar resultados
print("Juan tiene " + str(edad_actual) + " años y se retirará a los " + str(edad_retiro) + ".")
print("Le faltan " + str(anos_faltantes) + " años para jubilarse, lo que equivale a " + str(meses_faltantes) + " meses.")
print("Si ahorra $" + str(ahorro_mensual) + " al mes, habrá ahorrado un total de $" + str(total_ahorrado) + ".")
Juan tiene 35 años y se retirará a los 65.
Le faltan 30 años para jubilarse, lo que equivale a 360 meses.
Si ahorra $300 al mes, habrá ahorrado un total de $108000.

Conversión de minutos a horas

📌Un video dura “135” minutos. Convierte ese tiempo a horas y minutos.

✏ Pasos:

  • Convierte los minutos a número.

  • Divide entre 60 para obtener horas.

  • Calcula los minutos restantes.

  • Muestra el resultado en un print.

# Datos iniciales
tiempo_minutos = "135"

# Conversión y operación
minutos = int(tiempo_minutos)
horas = minutos // 60
min_restantes = minutos % 60

# Mostrar resultado
print("El video dura " + str(horas) + " horas y " + str(min_restantes) + " minutos.")
El video dura 2 horas y 15 minutos.

Mini reto integrador#

Calculadora de reserva:

  • Inputs como variables (no pedir input):

    • tarifa por noche, número de noches, fee de limpieza, descuento %, impuesto %

  • Calcula:

    • subtotal antes de descuento

    • descuento en dinero

    • subtotal con descuento

    • impuestos

    • total final

  • Genera un mensaje final con formateo:

    • muestra cada concepto y el total

Extra (si hay tiempo):

  • Crea una variable booleana is_weekend y un “recargo” si es fin de semana

  • Usa dos totals, uno con recargo y otro sin recargo

👀 Ver solución
# =========================
# Reto integrador: Calculadora de reserva (SOLUCIÓN)
# =========================

# Inputs (variables base)
nightly_rate = 175.0       # tarifa por noche
nights = 4                 # número de noches
cleaning_fee = 85.0        # fee de limpieza
discount_pct = 12.0        # descuento en %
tax_pct = 11.0             # impuesto en %

# 1) Subtotal antes de descuento
subtotal_before_discount = nightly_rate * nights + cleaning_fee

# 2) Descuento en dinero
discount_amount = subtotal_before_discount * (discount_pct / 100)

# 3) Subtotal con descuento
subtotal_after_discount = subtotal_before_discount - discount_amount

# 4) Impuestos (sobre el subtotal con descuento)
tax_amount = subtotal_after_discount * (tax_pct / 100)

# 5) Total final
total = subtotal_after_discount + tax_amount

# Mensaje final (formateado)
message = (
    f"📌 Resumen de tu reserva\n"
    f"- Noches: {nights}\n"
    f"- Tarifa por noche: ${nightly_rate:,.2f}\n"
    f"- Limpieza: ${cleaning_fee:,.2f}\n"
    f"- Subtotal (antes de descuento): ${subtotal_before_discount:,.2f}\n"
    f"- Descuento ({discount_pct:.0f}%): -${discount_amount:,.2f}\n"
    f"- Subtotal (con descuento): ${subtotal_after_discount:,.2f}\n"
    f"- Impuestos ({tax_pct:.0f}%): ${tax_amount:,.2f}\n"
    f"✅ Total: ${total:,.2f}"
)

print(message)

# =========================
# EXTRA: escenario con recargo de fin de semana (sin condicionales)
# =========================
is_weekend = True
weekend_surcharge_pct = 8.0  # recargo %

# Total con recargo (escenario hipotético)
subtotal_weekend = (nightly_rate * (1 + weekend_surcharge_pct / 100)) * nights + cleaning_fee
discount_weekend = subtotal_weekend * (discount_pct / 100)
subtotal_weekend_after_discount = subtotal_weekend - discount_weekend
tax_weekend = subtotal_weekend_after_discount * (tax_pct / 100)
total_weekend = subtotal_weekend_after_discount + tax_weekend

print("\n🧾 Escenario con recargo de fin de semana (hipotético):")
print(f"- Total sin recargo: ${total:,.2f}")
print(f"- Total con recargo ({weekend_surcharge_pct:.0f}%): ${total_weekend:,.2f}")