PASO 01: Ir a la web de python: https://www.python.org/
PASO 02: Pinchar en Downloads > Windows
PASO 03: Descargar un instalador (64 bit)
PASO 04: Instalar el archivo descargado
Es un paquete que proporciona un conjunto integral de herramientas para la interoperabilidad entre Python y R.
# Instalamos el paquete reticulate
install.packages("reticulate", dependencies = TRUE)
# Cargamos la librería
library(reticulate)
Definimos que R utilice el ejecutable Python.exe que acabamos de instalar, para ello
se inserta un trozo de R y se ejecuta:
#Modificar el path de acuerdo a cada usuario.
use_python("C:\\Users\\Alberto\\AppData\\Local\\Programs\\Python\\Python38\\python.exe", required = TRUE)
Insertando un trozo de python, importando la librería sys, para asegurarnos de que se está ejecutando el python deseado (Podemos tener más de una versión instalada):
import sys
print(sys.version)
## 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:57:54) [MSC v.1924 64 bit (AMD64)]
Los siguientes ejemplos serán ejecutados dentro de un Trozo de Python.
#Los comentarios en python son líneas de código que python, no considera parte del programa, y sirven para documentar nuetro código.
#Ejemplo 01: Poner un comentario de una línea con el caracter #
#Nota: Todo lo que aparezca despues del #, sera considerado como comentario.
# Esto es un comentarios
print("Hola") #Esto también es un comentario
#Ejemplo 02: Poner un comentario de varias líneas con el caracter '''
'''
Con las 3 cremillas simples
el comentario
puede ser para más de una línea
'''
#Ejemplo 03: Poner un comentario de varias líneas con el caracter """
"""
Con las 3 cremillas dobles
el comentario
puede ser para más de una línea
"""
#Una variable es un sitio donde guardamos una determinada información. En función del tipo de información que guardemos (texto, números, booleanas, etc.), la variable será de uno u otro tipo.
#Consideraciones:
#a) Las variables no se pueden tener el nombre una palabra reservada del lenguaje.
#b) Deben comenzar por un letra o barra baja _
#c) No hay limitación de longitud
#d) Son sensibles a Mayusculas. (nombre es diferente de Nombre)
#Ejemplo 01: Crear una variable entera y ver el su tipo de variable
#Tips: Usar type() para ver el tipo.
numero = 100
print(type(numero)) #int
#Ejemplo 02: Crear una variable decimal y ver el su tipo de variable
#Tips: Usar type() para ver el tipo.
decimal = 10.1
print(type(decimal)) #float
#Ejemplo 03: Crear una variable cadena con "" y con '', y ver sus tipos de variables.
#Tips: Usar type() para ver el tipo.
texto = "Soy un texto"
otro_texto = 'otro texto'
print(type(texto)) #string
print(type(otro_texto)) #string
#Ejemplo 04: Crear una variable booleana verdedera y falsa, y ver sus tipos de variables.
#Tips: Usar type() para ver el tipo.
booleano_verdadero = True
booleano_falso = False
print(type(booleano_verdadero))#True | Ojo la T de True es en mayúsculas.
print(type(booleano_falso))#False | Ojo la F de False es en mayúsculas.
#Ejemplo 05: Crear una variable, pero no asignale ningún valor y comprobar su tipo, luego comprobar de 2 formas si está o no asignada.
#Tips usar la palabra reservada "None".
a = None
print(type(a)) #NoneType
#Forma 01
if a == None:
print("No tiene asignado un valor - Es None")
else:
print("Si tiene asignado un valor - No es None")
#Forma 02 - Mejor forma
if a is None:
print("No tiene asignado un valor - Es None")
else:
print("Si tiene asignado un valor - No es None")
#Ejemplo 06: Crear 3 variables, a,b,c que sean 0, pero en una misma línea.
a = b = c = 0
print(a) # 0
print(b) # 0
print(c) # 0
#Python permite transformar algunos tipos de Dados en otros, para los cual se usan las siguientes funciones: int() str() float()
#Ejemplo 01: Transformamos un string a entero
numero = '10' #print(type(numero)) | str
numero = int(numero) #print(type(numero)) | int
#Ejemplo 02: Transformamos entero a un string
texto = 10 #print(type(texto)) | int
texto = str(texto) #print(type(texto)) | str
#Ejemplo 03: Transformamos string a un float
decimal = '10.1' #print(type(decimal)) | str
decimal = float(decimal) #print(type(decimal)) | float
#La función print() es la forma general de mostrar información por pantalla. Generalmente podemos mostrar texto y pero también variables.
#Ejemplo 01: Imprimir por pantalla "Hola Universo"
print("Hola Universo") #Hola Universo
#Ejemplo 02: Imprimir por pantalla el texto "Mi nombre es " y una variable nombre
nombre = "Alberto"
print("Mi nombre es ",nombre) #Mi nombre es Alberto
#Opcional print("Mi nombre es " + variable)
#Ejemplo 03: Imprimir por pantalla texto variable texto
edad = 100
print("Yo tengo ",edad, " años") #Yo tengo 100 años
#Opcional print("Yo tengo " + str(edad) + " años") |Notar la conversión.
#Ejemplo 04: Imprimir por pantalla con cadena f una variable y una suma
#Tips: Con una f al inicio todo lo que esté dentro de {} será código de python.
nombre = 'Alberto'
print(f"Mi nombre es {nombre} y mi edad es {50 + 50}")
#Mi nombre es Alberto y mi edad es 100
#Ejemplo 05: Imprimir por pantalla con format
#Tips: Se pone .format al final con cada variable. Las cuales reemplazan a las {} que existan dentro de la cadena - Nota: Forma antigua de hacerlo.
nombre = 'Alberto'
edad = 100
print("Mi nombre es {} y mi edad es {}".format(nombre,edad))
#Mi nombre es Alberto y mi edad es 100
#Ejemplo 06: Imprimir por pantalla con format
#Tips: Se pone .format al final con cada variable. Las cuales reemplazan a las {} que existan dentro de la cadena - Nota: Forma antigua de hacerlo.
nombre = 'Alberto'
print('Hola %s' %(nombre)) #Hola Alberto
#%s - Cadena o objetos
#%d - Integral
#%f - Números de punto flotante
#%.<numero de digitos>f - Números de punto flotante con una cantidad de números fijos a la derecha del punto.
#En programación y matemáticas, los operadores aritméticos son aquellos que manipulan los Dados de tipo numérico, es decir, permiten la realización de operaciones matemáticas (sumas, restas, multiplicaciones, etc.).
#Operadores de = | += | -= | *= | /= | %= | **= |
a = 10 # Asignamos el valor 10 a la variable a
a += 5 # Es lo mismo que a = a + 5 = 10 + 5 = 15
a = 10
a -= 5 # Es lo mismo que a = a - 5 = 10 - 5 = 5
a = 10
a *= 5 # Es lo mismo que a = a * 5 = 10 * 5 = 50
a = 10
a /= 5 # Es lo mismo que a = a / 5 = 10 / 5 = 2.0
a = 10
a %= 5 # Es lo mismo que a = a % 5 = 10 % 5 = 0
a = 10
a **= 5 # Es lo mismo que a = a ** 5 = 10 ** 5 = 10^5
#Operadores + | - | * | / | // | % | ** |
b = 10;c = 8
print(b+c) #10 + 8 = 18
print(b-c) #10 - 8 = -2
print(b*c) #10 x 8 = 80
print(b/c) #10 / 8 = 1.25
print(b//c) #10 // 8 = 1 : División entera
print(b%c) #10 % 8 = 2 : Muestra el resto de la división
print(b**c) #10 ** 8 = 10^8 : 10 elevado a 8
#Operadores > | >= | < | <= | == | != |
d = 1;e = 2
d > e #1 > 2 = False
d >= e #1 >= 2 = False
d < e #1 < 2 = True
d <=e #1 <= 2 = True
d == e #1 == 2 = False #Acá no se asigna, se pregunta si son iguales.
d != e # 1 != 2 = True #Acá se pregunta si son diferentes.
#Operadores and | or | not
#Uso del and
print(True and True) #True
print(1 < 2 and 3 < 4) #True
#Uso del or
False or False #False
1 > 2 or 3 > 4 #False
#Uso del not
print(not (True and True)) #False
print(not (1 > 2 or 3 > 4)) #True
#Los condicionales nos ayudan a controlar el flujo de nuestro programa, decidiendo si unas líneas de código se tienen que ejecutar en función de si se cumplen unas condiciones preestablecidas. En concreto, comprueban si una condición es verdadera o falsa para tomar o no cierta acción.
#Ejemplo 01: Validad que edad sea mayor o igual a 18, y si lo cumple que lo imprima por pantalla.
edad = 20
if edad >= 18: #Si ocurre esto
print("Es mayor de edad") # Es mayor de edad
#Nota: Si edad lo dejamos en 15 años, no imprimiría nada.
#Ejemplo 02: Validad que edad sea mayor o igual a 18, y si lo cumple que lo imprima por pantalla. Si no lo es que tambíen lo informe por pantalla.
edad = 20
if edad >= 18: #Si ocurre esto
print("Es mayor de edad") # Es mayor de edad
else: #Si no entonces
print("No es mayor de edad") # No es mayor de edad
#Opcional
print("Es mayor de edad") if edad >= 18 else print("No es mayor de edad")
#Ejemplo 03: Indicar si las edad está entre:
#0 y 20 => Imprimir Joven
#20 y 40 => Imprimir Adulto
#40 y 100 => Imprimir Mayor
#Otra opción => Imprimir Raro
edad = 101
if valor >= 0 and valor <=20:
print("Joven")
elif valor > 20 and valor <=40:
print("Joven")
elif valor > 40 and valor <=100:
print("Mayor")
else:
print("Raro")
#salida: Raro
#Ejemplo 04: Indicar si las edad está entre usando operadores encadenados
#0 y 20 => Imprimir Joven
#20 y 40 => Imprimir Adulto
#40 y 100 => Imprimir Mayor
#Otra opción => Imprimir Raro
edad = 45
if 0 <= edad <=20:
print("Joven")
elif 20 < edad <=40:
print("Adulto")
elif 40 < edad <=100:
print("Mayor")
else:
print("Raro")
#salida: Mayor
#Ejemplo 05: Indicar de 2 formas como podemos consultar si la la variable nombre dada, es alguno de los siguientes nombres: 'Juan','Hugo' o 'Luis'
nombre = 'Hugo'
#Alternativa 01
if nombre == 'Juan' or nombre == 'Hugo' or nombre == 'Luis':
print("El nombre está dentro de uno de los tres")
#Alternativa 02
if nombre in( 'Juan', 'Hugo','Luis'):
print("El nombre está dentro de uno de los tres")
#Los bucles son otra herramienta para alterar el flujo normal de un programa. Nos permiten repetir una porción de código tantas veces como queramos. Python incluye únicamente dos tipos de bucle: for y while.
#Nota: En python no existe el do-while
#Ejemplo 01: Imprimir los primeros 10 números del 0 al 9 usando FOR
#Tips: range(fin): Crea una secuencia que va desde 0 hasta fin-1
for i in range(10):
print(i) #0 1 2 3 4 5 6 7 8 9
#Nota: i podría ser cualquier variable, siempre que luego esté en el print.
#Opcional:
for i in range(10):
print(i) #0 1 2 3 4 5 6 7 8 9
else:
print("Terminó el for") #Terminó el for (Al terminar imprimi este mensaje)
#Ejemplo 02: Imprimir los primeros 10 números del 10 al 1 usando FOR
#Tips: range(ini,fin,paso): ini: inicio | fin-1: final | paso: incremento
for i in range(10,0,-1):
print(i) #10 9 8 7 6 5 4 3 2 1
#Ejemplo 03: Imprimir los números pares entre 0 y 9
#Tips: range(ini,fin,paso): ini: inicio | fin-1: final | paso: incremento
for i in range(2,10,2):
print(i) #2 4 6 8
#Ejemplo 04: Imprimir los primeros 10 números usando While.
i = 0
while (i<10): #Mientras i < 10 hacer
print(i) #0 1 2 3 4 5 6 7 8 9
i = i + 1 # Opcional i += 1
#Ejemplo 05: Imprimir los números pares entre 2 y 9 con while.
j = 2
while (j<10): #Mientras j < 10 hacer
print(j) #2 4 6 8
j = j + 2 #Opcional j += 2
#Ejemplo 06: Usar la palabra reservada "else" en el ciclo while.
valor = 10
while (valor <= 5): #Nunca entra al ciclo, ya que 10 <= 5 es False
print(valor)
valor += 1
else:
print("Termino el ciclo while") #Esto se ejecuto incluso si entrara al ciclo.
#Terminó el ciclo while
#Una colección permite agrupar varios objetos bajo un mismo nombre. De de los cuales podemos distinguir en python la Lista, Tupla el Conjunto y el Diccionario.
#LISTAS:Pueden llenarse con variables de varios tipos, y es mutable, lo que quiere decir que se puede modificar.
#Ejemplo 01: Generar una lista vacía y comprobarlo
lista = []
print(type(lista)) #list
#LISTAS:Pueden llenarse con variables de varios tipos, y es mutable, lo que quiere decir que se puede modificar.
#Ejemplo 02: Generar una lista con varios elementos y comprobarlo.
lista = [10,20,30,40,50,"a", True]
print(type(lista)) #list
#Nota: Forma alternativa de crear una lista => lista = list('abcd') #['a','b','c','d']
#LISTAS:Pueden llenarse con variables de varios tipos, y es mutable, lo que quiere decir que se puede modificar.
#Ejemplo 03: Mostrar el primer y último elemento de la lista
lista = [10,20,30,40,50,"a",True]
#Índice + 0 1 2 3 4 5 6
#Índice - -7 -6 -5 -4 -3 -2 -1
print(lista[0]) #10
print(lista[-1]) #True
#LISTAS:Pueden llenarse con variables de varios tipos, y es mutable, lo que quiere decir que se puede modificar.
#Ejemplo 04: Cambiar el 30 por la letra "a" en la lista:
lista = [10,20,30,40,50,"a",True]
lista[2] = "a"
print(lista) #[10,20,'a',40,50,'a', True]
#LISTAS:Pueden llenarse con variables de varios tipos, y es mutable, lo que quiere decir que se puede modificar.
#Ejemplo 05: Imprimir todos los elementos de la lista
lista = [10,20,'a',40,50,'a', True]
for elemento in lista: #elemento puede tener cualquier nombre
print(elemento) #10 20 'a' 40 50 'a' True
#TUPLAS: Pueden llenarse con variables de varios tipos, y es inmutable lo que quiere que no se puede modificar. (Más liviana que la lista)
#Ejemplo 01: Crear un Tupla vacía y comprobar su tipo
tupla = tuple()
print(type(tupla)) #tuple
#TUPLAS: Pueden llenarse con variables de varios tipos, y es inmutable lo que quiere que no se puede modificar. (Más liviana que la lista)
#Ejemplo 02: Crear un Tupla con un sólo valor
tupla = ('a',) #Tiene que llevar la coma ya que si no lo considerará como str.
#Esto se da para diferenciar con los argumentos de una función.
#Importante: Los paréntensis no son parte de las tuplas, lo importate es la coma, osea esto es igual a tupla = 'a',
#TUPLAS: Pueden llenarse con variables de varios tipos, y es inmutable lo que quiere que no se puede modificar. (Más liviana que la lista)
#Ejemplo 03: Crear un Tupla con varios elementos de más de un tipo
tupla = 1,2,3,4,5,"a" #Opcional (1,2,3,4,5,"a")
#TUPLAS: Pueden llenarse con variables de varios tipos, y es inmutable lo que quiere que no se puede modificar. (Más liviana que la lista)
#Ejemplo 04: Imprimir el primer y último elemento
tupla = 1, 2, 3, 4, 5, "a"
#Índice + 0 1 2 3 4 5
#Índice - -6 -5 -4 -3 -2 -1
print(tupla[0]) #1
print(tupla[-1]) #'a'
#TUPLAS: Pueden llenarse con variables de varios tipos, y es inmutable lo que quiere que no se puede modificar. (Más liviana que la lista)
#Ejemplo 05: Imprimir todos los elementos de la tupla
tupla = 1, 2, 3, 4, 5, "a"
for e in lista: #e puede tener cualquier nombre
print(e) # 1 2 3 4 5 "a"
#CONJUNTOS(sets): Colección de elementos de uno o varios tipos, desordenado (No existe índice) y no permite elementos repetidos.
#Ejemplo 01: Crear un conjunto vacío y comprobar su tipo
ejemplo_conjunto = set() #Ojo {} no es un conjunto vacío.
print(type(ejemplo_conjunto)) #set
#CONJUNTOS(sets): Colección de elementos de uno o varios tipos, desordenado (No existe índice) y no permite elementos repetidos.
#Ejemplo 02: Crear un conjunto de varios elementos y comprobar su tipo.
ejemplo_conjunto = {'a','b',3,4,"5",'6',True}
print(type(ejemplo_conjunto)) #set
#CONJUNTOS(sets): Colección de elementos de uno o varios tipos, desordenado (No existe índice) y no permite elementos repetidos.
#Ejemplo 03: Imprimir conjunto utilizando un for.
ejemplo_conjunto = {'a','b',3,4,"5",'6',True}
for e in ejemplo_conjunto:
print(e) # True 3 4 a 5 b 6 |Nota: No hay índice ni orden.
#Ejemplo 04: Dato el siguiente consujunto:
#1) Imprimir el largo
#2) Consultar si '6' esta dentro del conjunto
#3) Agregar el elemento 'b' al conjunto
#4) Eliminar el elemento 'a' al conjunto
#5) Dejar en blanco el conjunto
#6) Eliminar el conjunto
conjunto = {'a','b',3,4,"5",'6',True}
#1 - Imprimir el largo
print(len(conjunto)) #7
#2 - Consultar si '6' esta dentro del conjunto
print('6' in conjunto)#True
#3 - Agregar el elemento 'b' al conjunto
conjunto.add('b') #Al ya estár dentro 'b', no lo incorpora, pero tampoco informa error.
#4 - Eliminar el elemento 'a' al conjunto
conjunto.remove('a') #Si el elemento 'a' no existe muestra error.
#opcional conjunto.discard(3) | Esta función no arrojo error de no existir.
#5 - Dejar en blanco el conjunto
conjunto.clear()
print(conjunto)#set()
#6 - Eliminar el conjunto
del conjunto
#DICCIONARIOS: Colección de elementos indexados clave:valor, no ordenados y se pueden modificar.
#Ejemplo 01: Crear un diccionario vacío e imprimir su tipo.
ejemplo_diccionario = {}
print(type(ejemplo_diccionario)) # dict
#Ejemplo 02: Crear un diccionario con varios Dados e imprimir su tipo.
ejemplo_diccionario = {'nombre':'claudio','edad':100,'telefono':101010}
print(type(ejemplo_diccionario)) # dict
#Ejemplo 03: Imprimir sólo las claves del diccionario dado.
ejemplo_diccionario = {'nombre':'claudio','edad':100,'telefono':101010}
for clave in ejemplo_diccionario:
print(clave) #nombre edad teléfono
#Ejemplo 04: Imprimir sólo las claves del diccionario dado, usando función keys().
ejemplo_diccionario = {'nombre':'claudio','edad':100,'telefono':101010}
ejemplo_diccionario.keys() # dict_keys(['nombre', 'edad', 'telefono'])
claves = list(ejemplo_diccionario.keys()) # ['nombre', 'edad', 'telefono']
for clave in claves:
print(clave) #nombre edad teléfono
#Ejemplo 05: Imprimir sólo los valores del diccionario dado, usando función values().
ejemplo_diccionario = {'nombre':'claudio','edad':100,'telefono':101010}
ejemplo_diccionario.values() # dict_values(['claudio', 100, 101010])
valores = list(ejemplo_diccionario.values()) # ['claudio', 100, 101010]
for valor in valores:
print(valor) #'claudio' 100 101010
#DICCIONARIOS: Colección de elementos indexados clave:valor, no ordenados y se pueden modificar.
#Ejemplo 06: Imprimir diccionario de clave y valor
ejemplo_diccionario = {'nombre':'claudio','edad':100,'telefono':101010}
for clave,valor in ejemplo_diccionario.items():
print(f'La clave es {clave} y el valor es {valor}')
## La clave es nombre y el valor es claudio
## La clave es edad y el valor es 100
## La clave es teléfono y el valor es 101010
#Ejemplo 07: Dato el diccionario:
#1) Imprimir el valor de 'nombre'
#2) Modificar el la edad de 100 a 200.
#3) Con 2 ciclos for mostrar claves y valores
#4) Consulta si "telefono" es clave en nuestro diccionario
#5) Agregar un nuevo elemento
#6) Eliminar la clave-valor nombre:claudio
#7) Dejar en blanco el diccionario
#8) Eliminar diccionario
dic = {'nombre':'claudio','edad':100,'telefono':101010}
#1 - Imprimir el valor de 'nombre'
print(dic['nombre'])#claudio
#Opcional dic.get('nombre')#'claudio'
#2 - Modificar el la edad de 100 a 200.
dic['edad'] = 200
print(dic)#{'nombre': 'claudio', 'edad': 200, 'telefono': 101010}
#3 - Con 2 ciclos for mostrar claves y valores
for a in dic:
print(a)
#nombre
#edad
#telefono
for a in dic:
print(dic[a])
#claudio
#200
#101010
#4 - Consulta si "telefono" es clave en nuestro diccionario
print("telefono" in dic)#True
#5 - Agregar un nuevo elemento
dic["otro"] = 1000
print(dic) # {'nombre': 'claudio', 'edad': 200, 'telefono': 101010, 'otro': 1000}
#6 - Eliminar la clave-valor nombre:claudio
dic.pop('nombre')
print(dic)#{'edad': 200, 'telefono': 101010, 'otro': 1000}
#7 - Dejar en blanco el diccionario
dic.clear()
print(dic) # {}
#8 - Eliminar diccionario
del dic
#FUNCIONES: Una función es un bloque de código con un nombre asociado, que recibe cero o más argumentos como entrada, sigue una secuencia de sentencias, la cuales ejecuta una operación deseada y devuelve un valor y/o realiza una tarea, este bloque puede ser llamados cuando se necesite.
#Ejemplo 01: Crear una función que imprima un saludo, y llamarla.
#Definimos la función
def saludar():
print("Hola")
#Llamamos a la función
saludar() #Hola
#Ejemplo 02: Crear una función que sume 2 números y llamarla.
#Definimos la función con 2 argumentos
def suma(n1,n2):
return n1 + n2
#Llamamos a la función
resultado = suma(3,4) #Guardamos el resultado
print(resultado) #7 |Opcional: print(suma(3,4))
#Ejemplo 03: Crear una función multiplicacion sin su implementación, pero al ejecutarla que no de error.
#Tips: Usar sentencia "pass", que se utiliza como marcador de posición para la implementación futura de funciones.
#Definimos la función con 2 argumentos
def multiplicacion(n1,n2):
pass
#Llamamos a la función
resultado = multiplicación(3,4) #Guardamos el resultado
print(resultado) #None
#Ejemplo 04: Crear una función llamada suma_resta que haga las dos operaciones. Luego llamarla y recuperar ambos valores e imprimirlos.
#Definimos la función con 2 argumentos
def suma_resta(n1,n2):
sumar = n1 + n2
restar = n1 - n2
return sumar, restar #Entregamos 2 variables al mismo tiempo
#Llamamos a la función
suma,resta = suma_resta(3,4) #Guardamos el resultado y lo asignamos a las 2 variables
print("La suma es ", suma)
print("La resta es ", resta)
#Ejemplo 05: Crear una función con 2 parametros por defecto, y llamar a la función sin argumentos.
#Definimos la función con 2 argumentos
def suma(n1=1,n2=2):
sumar = n1 + n2
return sumar
print("La suma es ", suma())#La suma es 3
#Variables Locales: Se declara en su ámbito de uso (en el programa principal y dentro de una función)
#Variable Globales: Se declara fuera de su ámbito para que se pueda utilizar en cualquier función que la declare como global.
#Ejemplo 01: Es posible ver una variable local de una función, fuera de ella?
#Definimos la función
def ver():
cadena = 'dentro' #variable local
cadena = 'fuera' #variable global
print(cadena) #fuera
ver()
print(cadena) #fuera
#Respuesta: NO
#Ejemplo 02: Es posible ver una variable Global dentro de una función?
cadena = 'fuera' #Variable global
#Definimos la función
def ver():
print(cadena)
ver() #fuera
#Respuesta: SI
#Ejemplo 03: Es posible modificar una variable Global dentro de una función?
cadena = 'fuera' #Variable global
#Definimos la función
def ver():
cadena = 'dentro' # Variable local
ver()
print(cadena) #fuera
#Respuesta: NO
#Ejemplo 04: Es posible modificar una variable Global dentro de una función?
cadena = 'fuera' #Variable global
#Definimos la función
def ver():
cadena = 'dentro' # Variable local
ver()
print(cadena) #fuera
#Respuesta: SI, con palabra reservada. Así como está NO!
#Ejemplo 05: Modificar una variable Global dentro de una función
cadena = 'fuera' #Variable global
#Definimos la función
def ver():
global cadena #Usar la palabra reservada global para poder modificarlo
cadena = 'dentro' # Variable local
ver()
print(cadena) #dentro
#Ejemplo 06: Se puede crear una variable Global dentro de una función?
def ver():
global cadena #La hacemos global
cadena = 'dentro' # Variable global
ver()
print(cadena) #dentro
#Respuesta: SI
#INPUT: Se utiliza para recibir Datos del usuario, siempre como string.
#Ejemplo 01: Consulte el nombre del usuario, y imprimirlo por pantalla
nombre = input("Ingrese su nombre")
print(f"Hola {nombre}")
#Ejemplo 02: Ingresar dos números, sumarlos e imprimirlos por pantalla.
n1 = int(input("Número uno: ")) #Lo guardamos como entero
n2 = int(input("Número dos: ")) #Lo guardamos como entero
print(f'La suma de {n1} y {n2} es {n1+n2}') #La suma de n1 y n2 es n1+n2
#ENUMERATE: Función incluida en python que permite imprimir un iterador en un bucle for
#Ejemplo 01:Imprimir el índice y el valor de la lista [10,20,30,40]
for indice, valor in enumerate([10,20,30,40]):
print(indice,valor)
#indice valor
# 0 10
# 1 20
# 2 30
# 3 40
#Ejemplo 02:Imprimir el índice y el valor de la lista [10,20,30,40], pero que el índice inicie en 1.
#tips: enumerar (iterable, inicio = 0)
for indice, valor in enumerate([10,20,30,40], 1):
print(indice,valor)
#indice valor
# 1 10
# 2 20
# 3 30
# 4 40
#Se utiliza para cortar una secuencia determinada cadena|bytes|tupla|lista|rango
#forma de usarlo: lista[slice(inicio, fin, paso)]
#forma de Alternativa: lista[inicio:fin:paso]
#inicio: Si no se coloca, se traduce desde el inicio [:fin:paso] = [0:fin:paso]
#fin: Si no se coloca, se traduce como hasta el fin [inicio::paso] = [inicio:len(numeros):paso]
#paso: Si no se coloca, se traduce índice de 1 en 1 [inicio:fin] = [inicio:fin:]
#Ejemplo 01: Dado la siguiente lista, imprimir con slice, los primeros 5 elementos.
#Tips: lista[inicio:fin:paso]
numeros = [10,20,30,40,50,60,70,80,90]
#índice + 0 1 2 3 4 5 6 7 8
#índice - -9 -8 -7 -6 -5 -4 -3 -2 -1
print(numeros[:5:]) #[10, 20, 30, 40, 50] | Opcional: print(numeros[:5])
#Ejemplo 02: Dado la siguiente lista, imprimir los 5 últimos valores
#Tips: lista[inicio:fin:paso]
numeros = [10,20,30,40,50,60,70,80,90]
#índice + 0 1 2 3 4 5 6 7 8
#índice - -9 -8 -7 -6 -5 -4 -3 -2 -1
print(numeros[4::]) #[50,60,70,80,90] opcional: numeros[-5::] o numeros[0:3:] o numeros[0:3]
#Ejemplo 03: Dado la siguiente lista, imprimir sólo los valores impares
numeros = [10,20,30,40,50,60,70,80,90]
#índice + 0 1 2 3 4 5 6 7 8
#índice - -9 -8 -7 -6 -5 -4 -3 -2 -1
numeros[::2] #[10, 30, 50, 70, 90]
#Ejemplo 04: Dado la siguiente lista, generar una copia idéntica de la lista
numeros = [10,20,30,40,50,60,70,80,90]
#índice + 0 1 2 3 4 5 6 7 8
#índice - -9 -8 -7 -6 -5 -4 -3 -2 -1
vector = numeros[::] #Opcional: numeros[:]
print(vector)# [10,20,30,40,50,60,70,80,90]
#Ejemplo 05: Dado la siguiente lista, imprimir lista al revés.
numeros = [10,20,30,40,50,60,70,80,90]
#índice + 0 1 2 3 4 5 6 7 8
#índice - -9 -8 -7 -6 -5 -4 -3 -2 -1
vector = numeros[::-1]
print(vector) # [90, 80, 70, 60, 50, 40, 30, 20, 10]
#Función chr: Devuelve un carácter (una cadena) a partir de un entero (representa el punto de código Unicode del carácter).<El rango válido del número entero es de 0 a 1,114,111>
#Tabla: https://unicode-table.com/en/#basic-latin
#Función ord: Devuelve un número entero que representa el carácter Unicode.
#Nota: Son funciones inversas
#Fuente: https://www.programiz.com/python-programming/methods/built-in/chr
#Ejemplo 01: Aplicar las funciones ord sobre "A" y chr sobre 65 para comprobar que son inversas.
print(ord('A')) #65
print(chr(65)) #A
#FUNCIONES LAMBDA: En Python, las funciones lambda son también conocidas como funciones anónimas porque se definen sin un nombre. (lambda parámetros: expresión)
#Ejemplo 01: Imprimir mensaje por pantalla usando funciones Lambda
saludo = lambda: print("Hola") #Se crea sin pasar argumentos.
saludo() #Hola
#Ejemplo 02: Elevar un número al cuadrado usando funciones Lambda
cuadrado = lambda x : x ** 2
resultado = cuadrado(2)
print(resultado) #4
#Ejemplo 03: Sumar 2 números usando funciones Lambda.
suma = lambda n1,n2 : n1 + n2
resultado = suma(3,4)
print(resultado) #7
#Ejemplo 04: Usar el Metodo lower() para cualquier cadena dejarla en minúsculas.
minus = lambda texto : texto.lower()
resultado = minus("SOMOS LOS MEJORES")
print(resultado) #'somos los mejores'
#Ejemplo 05: Hacer una función lambda que el valor entregado está entre 0 y 50 (incluyendo los extramos), arroje el mensaje 'Entre 0 y 50', de lo contrario devuelva el mismo valor.
rango = lambda x : 'Entre 0 y 50' if 0 <= x <=50 else x
resultado = rango(40)
print(resultado) #'Entre 0 y 50'
# *args y **kwargs permiteN pasar múltiples argumentos o argumentos de palabras clave a una función. El primero (*args) pasa tablas y el segundo (**kwars) para diccionarios. Estás palabras en realidad se usan por conveción, lo importante acá es el * y el **.
#Nota: No son argumentos obligatorios, si no opcionales.
# Ejemplo 01: Definir una función que pueda sumar n valores pasados como argumentos, como tupla.
#Definimos la función
def suma(*args):
total = 0
for numero in args:
total += numero
return total
print(suma(1,2,3,4,5))#15
#opcionalmente:
#Definimos la función
def suma(*numeros):
total = 0
for numero in numeros:
total += numero
return total
print(suma(1,2,3,4,5))#15
# Ejemplo 02: Definir una función que pueda concatenar n palabras pasados como argumentos, como diccionario.
#Tips: La palabra kwargs es opcional, puede ser reemplazada por cualquier otra.
def concatenar(**kwargs):
resultado = ""
for palabra in kwargs.values():
resultado += palabra
return resultado
diccionario = {"nombre":"alberto","apellido":"delgado"}
print(concatenar(**diccionario))#albertodelgado
#Opcionalmente:
print(concatenar(nombre = "alberto",apellido = "delgado"))#albertodelgado
#FUNCIONES RECURSIVAS: Son funciones que se llaman a sí mismas durante su propia ejecución. Ellas funcionan de forma similar a las iteraciones, pero debe encargarse de planificar el momento en que dejan de llamarse a sí mismas o tendrá una función recursiva infinita.
#Ejemplo 01: Implementar el factorial en una función recursiva y explicar como funciona internamente.
#Factorial: Se define como el producto de todos los números enteros positivos desde 1 hasta n. (Factorial de 0! es 1 por definición)
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
factorial(4) # 24
#Explicación del factorial y su fórmula:
#factorial(4) = 4 * 3 * 2 * 1
# = 4 * factorial(3)
# = 4 * 3 * factorial(2)
# = 4 * 3 * 2 * factorial(1)
# = 4 * 3 * 2 * 1 * factorial(0)
# => Su generalización es n * factorial(n-1)
# n Salida Comentario
#Primera línea: 4 4 x factorial(3) Al no saber el valor, lo deja en la pila
#Segunda línea: 3 3 x factorial(2) Al no saber el valor, lo deja en la pila
#Tercera línea: 2 2 x factorial(1) Al no saber el valor, lo deja en la pila
#Cuarta línea: 1 1 x factorial(0) Al no saber el valor, lo deja en la pila
#Quinta línea: 0 1 Acá conoce a factorial(0) = 1 y sube
#Sexta línea: 1 1 x 1 = 1 Resuelve: 1 x factorial(0)
#Séptima línea: 2 2 x 1 = 2 Resuelve: 2 x factorial(1)
#Octava línea: 3 3 x 2 = 6 Resuelve: 3 x factorial(2)
#Novena línea: 4 4 x 6 = 24 Resuelve: 4 x factorial(3)
#Ver el recorrido del código en: http://www.pythontutor.com/visualize.html#mode=edit
#Operadores de asignación: Permiten asignar valor a una o varias variables.
#Ejemplo 01: Asignar 2 valores en la misma línea.
#tips: Usar ; para separar instrucciones.
a=2;b=3
print(a) # 2
print(b) # 3
#Ejemplo 02: Asignar 2 valores en la misma línea
#tips: Usar desestructuración o desempaquetado
a,b = 2,3 # Lo de la derecha es un tupla, osea a,b = (2,3).
print(a) # 2
print(b) # 3
#Ejemplo 03: Asignar variables desde una lista, donde la variable primero, tenga el primer elemento de la lista, tercero, el tercer elemento de la lista y segundo, tenga el resto de los elementos de la lista.
#tips: Usar el simbolo * para agrupar
primero, *segundo, tercero = [1, 2, 3, 4, 5]
print(primero) # 1
print(segundo) # [2, 3, 4]
print(tercero) # 5
#Operadores de identidad: Permiten comprobar las referencias entre objetos. El operador "is" devolverá True si por ejemplo 2 listas apuntan al mismo objeto en memoria, mientras que el operador "is not" es lo contrario.
#Ejemplo 01: Dado las lista1 y lista2, comprobar las referencias.
lista1 = [1,2,3]
lista2 = lista1
print(lista1 is lista2) #True | Ya que apuntan al mismo objeto
print(lista2 is lista1) #True | Ya que apuntan al mismo objeto
#Nota1: lista1 == lista2 es True ya que == es True si los objetos a los que hacen referencia las variables son iguales.
#Nota2: Al apuntar lista1 y lista2 al mismo objeto, si se modifica la lista1, la lista2 también cambiará.
#Ejemplo 02: Dado las lista1 y lista2, comprobar las referencias.
lista1 = [1,2,3]
lista2 = [1,2,3]
lista1 is lista2 #False | Ya que apuntan a objetos diferentes en memoria
lista2 is lista1 #False | Ya que apuntan a objetos diferentes en memoria
#Nota: lista1 == lista2 #True ya que los objetos a los que hacen referencia las variables son iguales.
#Operadores de Pertenencia: Este tipo de operadores evalúan si un objeto pertenece a otro. Hay dos: in y not in, que es el complementario del anterior. El primero (in) devuelve True cuando el elemento pertenece al segundo.
#Ejemplo 01: El número dado, está dentro de la lista ?
#Tips: Usar operador "in"
numero = 1
lista = [1,2,3,4,5]
print(numero in lista) #True
#Ejemplo 02: El número dado, está fuera de la lista ?
#Tips: Usar operador "not in"
numero = 1
lista = [1,2,3,4,5]
print(numero not in lista) #False
#Ejemplo 01: Romper el ciclo for cuando llegue al valor 5 e imprimir los resultados
#Tips: Usar el comando break
for valor in range(10):
if valor == 5:
break #sale del for
print(valor) #0 1 2 3 4
#Ejemplo 02: Imprimir todos los valores en un ciclo for, salvo el valor 5
#Tips: Usar el comando continue
for valor in range(10):
if valor == 5:
continue #salta las líneas siguientes y continua con el otro ciclo
print(valor) #0 1 2 3 4 6 7 8 9
#Ejemplo 03: Imprimir los valores de un for anidado.
for i in range(3):
for j in range(2):
print(f"La i vale {i} y j vale {j}")
## La i vale 0 y j vale 0
## La i vale 0 y j vale 1
## La i vale 1 y j vale 0
## La i vale 1 y j vale 1
## La i vale 2 y j vale 0
## La i vale 2 y j vale 1
#Ejemplo 04: Pasar la frase "somos los mejores" a una lista e imprimirla
#Tips: Usar list() para transformarla a lista
lista = list("somos los mejores") #['s','o','m'.....]
for letra in lista:
print(letra) #s o m o s l o s ......
#Ejemplo 05: Usar desestructuración dentro de un for en una lista con tuplas internas.
#Lista con 3 tuplas internas
persona = [
("juan", 1, "sc"),
("cristian", 2, "nm"),
("coni", 3, "tr")
]
for nombre, programa, nivel in persona:
print(f"Nombre: {nombre}, programa: {programa}, nivel: {nivel}")
#Nombre: juan, programa: 1, nivel: sc
#Nombre: cristian, programa: 2, nivel: nm
#Nombre: coni, programa: 3, nivel: tr
#Ejemplo 01: Dada la siguiente lista, identificar su largo e imprimirlo.
#Tips: Usar función len()
lista = [1,2,3,4,5]
print(len(lista)) #5
#Ejemplo 02: Agregar el elemento 6 al final de la lista dada e imprimirla.
lista = [1,2,3,4,5]
lista.append(6)
print(lista) #[1,2,3,4,5,6]
#Ejemplo 03: Borrar el elemento 3, de la lista dada e imprimar la lista.
lista = [1,2,3,4,5]
lista.remove(3) #Opcional: "del lista[3]"
print(lista) #[1,2,4,5,6]
#Ejemplo 04: Borrar el último elemento, de la lista dada e imprimirlo (Valor eliminado y la lista).
lista = [1,2,3,4,5]
print(lista.pop()) #5
print(lista)#[1,2,4,5]
#Opcional: lista.pop(len(lista)-1) | del lista[len(lista)-1]
#Nota "del lista" borra la variable lista.
#Ejemplo 05: Invertir la lista dada e imprimirla.
lista = [1,2,3,4,5,6]
lista.reverse()
print(lista) #[6,5,4,2,1]
#Ejemplo 06: Insertar el número 10 en el índice 3, de la lista dadae imprimirla.
lista = [1,2,3,4,5,6]
lista.insert(3,10)
print(lista) #[1,2,3,10,4,5,6]
#Ejemplo 07: Dada la lista, ordenarla de menor a mayor e imprimirla
lista = [5,4,2,1,6,3]
lista.sort()
print(lista) #[1,2,3,5,6]
#Ejemplo 08: Dada la lista, copiarla a la variable vector pero que no queden referenciadas. (Comprobarlo)
lista = [1,2,3,4,5,6]
vector = lista.copy() #Nota: Si se hace con = quedan referenciando al mismo objeto
print(lista is vector) #False (Esto comprueba que no están referenciadas.)
#Ejemplo 09: Dada la siguientes lista, encontrar el índice para el valor 10
lista = [1,2,10,4,5,6]
print(lista.index(10)) #2
#Ejemplo 10: Contar las veces que aparece el número 10 en la lista dada.
lista = [1,2,3,4,5,6]
print(lista.count(10)) #0
#Ejemplo 11: Consultar si el valor 5 está en la lista dada
lista = [1,2,3,4,5,6]
print(5 in lista) #True | Lo contrario de in es "not in"
#Ejemplo 12: Dada la lista, dejar la lista en blanco e imprimirla
a = [1,2,3]
a.clear()
print(a) #[]
#Ejemplo 13: Dada la lista a y la lista b, consolidarlas en una sola llamada c e imprimirla.
a = [1,2,3]
b = [4,5,6]
c = a.extend(b) # Opcional: a + b
print(c) #[1, 2, 3, 4, 5, 6]
#Ejemplo 13: Generar una lista de números impares del 1 al 10
#Tips: Usar función range(inicio,fin,paso)
lista = list(range(1,10,2))
print(lista) # [1, 3, 5, 7, 9]
#Una cadena de caracteres en un objeto que consiste precisamente en una serie de signos o caracteres.
#Ejemplo 01: Definir una codena
cadena = 'Esto es una cadena' #"Esto también lo es"
#Ejemplo 02: Definir una cadena con saltos de línea.
#Tips: Usar la triple comilla '''
cadena = ''' Hola
cómo
estás? ''' #Hola\ncomo\nestas\n |Nota: "\n" es un salto de línea.
#Ejemplo 03: Concatenar dos cadenas
#Nota: Comillas simples o dobles da lo mismo
cadena1 = "Hola"
cadena2 = 'Universo'
cadena = cadena1 + ' ' + cadena2
print(cadena) #'Hola Universo'
#Ejemplo 04: Repetir el carácter # 10 veces
caracter = "#"
print(caracter * 10) # ##########
#Ejemplo 05: Identificar el largo de la cadena
caracter = "#"
print(len(caracter * 10)) # 10
#Ejemplo 06: Imprimir la frase "somos los mejores" sin usar list()
#Nota: Comillas simples o dobles da lo mismo
cadena = "somos los mejores"
for letra in cadena:
print(letra) #s o m o s l o s ......
#Nota: Esto funciona ya que las cadenadas funcionan como listas.
#cadena[0] es 's'
#Ejemplo 07: Imprimir la frase "somos los mejores" al revés
#tips: Usar la notación de rebanada => cadena[inicio,fin,paso]
cadena = "somos los mejores"
print(cadena[::-1]) #'serojem sol somos'
#Ejemplo 08: Pasar cadena a mayúsculas y minúsculas e imprimir la salida de la cadena original
cadena = "Somos Los Mejores"
print(cadena.upper()) #SOMOS LOS MEJORES
print(cadena.lower()) #somos los mejores
print(cadena) #Somos Los Mejores
#Existe cadena.capitalize() que deja la primera lentra en mayúscula y bajas las siguientes
#Ejemplo de salida => Somos los mejores
#Existe cadena.title() que deja todas las primera lentra de todas las palabras en mayúsculas
#Ejemplo de salida => Somos Los Mejores
#Existe cadena.swapcase() que transforma todas las mayúsculas a minúsculas y viceversa
#Ejemplo de salida => sOMOS lOS mEJORES
#Ejemplo 09: Transformar la cadena en una lista, donde cada palabra sea un elemento identificado por un espacio
cadena = "somos los mejores"
cadena = cadena.split(sep=" ")
cadena #['somos', 'los', 'mejores'] |Opcional cadena.split()
#Ejemplo 10: Transformar la lista a cadena, donde cada elemento se debe unir por espacios
cadena = ['somos', 'los', 'mejores']
cadena = ' '.join(cadena)
cadena #'somos los mejores'
#Ejemplo 11: Reemplazar todos los puntos por espacios
#Tips: cadena.replace("Texto_A_reemplazar","reemplazo")
cadena = 'somos.los.mejores'
resultado = cadena.replace('.',' ')
print(resultado) #somos los mejores |Nota: cadena no se modifica
#Ejemplo 12: Mostrar los últimos 3 caracteres de la cadena
#Tips: Como las cadenas se comportan como listas, podemos usar los slice [::]
cadena = 'somos los mejores'
resultado = cadena[-3::]
print(resultado) #'res'
#Ejemplo 13: Limpiar la cadena de espacios final e iniciales, y mostrar la cadena original.
#Tips: Usar strip() para eliminar espacios iniciales como finales
cadena = ' somos los mejores '
print(cadena.strip())#'somos los mejores' |Lo muestra sin espacios
print(cadena) #' somos los mejores ' |No modifica el original
#Ejemplo 14: Comprobar si el string "jor" está dentro de cadena
#Tips: Usar el operador "in".
cadena = 'somos los mejores'
print("jor" in cadena) #True
#Control de Excepciones: Es el control de errores que ocurren durante la ejecución de un programa.
#Ejemplo 01: División por 0. Evitar que el programa se detenga.
a = 10
b = 0
try: #Intenta realizar lo siguiente
resultado = a / b
print(f"El resultado es {resultado}")
except ZeroDivisionError: #Si no se puede (Acá va el nombre exacto de la excepción)
print("Ojo, estás dividiendo por 0")
print("Esto es el resto del programa")
#Salida:
#Ojo, estás dividiendo por 0
#Esto es el resto del programa
#Ejemplo 02: Validar que un la entrada por el usuario sea un valor entre 1 y 5.
#Inicializamos valor en 0 para que entre al while
valor = 0
while valor<1 or valor>5: #Opcionalmente "while not 1 <= valor <= 5"
#Intentar
try:
#Valor recibido por teclado
valor = int(input("Ingrese valor entre 1 y 5"))
#Si no es un valor, ejemplo una letra
except:
#Asigna el valor 0, lo que obliga que vuelva a iterar el while
valor = 0
#Ejemplo 03: Validar que edad ingreseada por teclado, sea número y de serlo, validar que sea mayor de 18 para dejar entrar, de lo contrario, indicarlo en un mensaje. Nota: Usar el try/except sólo para la parte que podría generar error (int), y la lógico separarla en un else.
try: #Intentar
edad = int(input('Ingresar tu edad: '))
except: #En caso de error, por ejemplo pasar una letra
print ('Error: No ingresaste un valor')
else: #Si Intentar paso sin problemas (no se ejecuto el except)
if edad < 18:
print('Para entrar, tienes que ser mayor de 18 años.')
else:
print('Bienvenido')
#Los archivos planos son una colección de información que está almacenada. Se suele usar para almacenar información en una forma no estructurada. Un ejemplo son los documentos CSV (valores separados por coma), TXT entre otros.
#Ejemplo 01: Crear un fichero de texto, y grabarlo con el texto "somos los mejores"
#Lo creamos en modo escritura (w:write) y de tipo texto (t:texto)
fichero = open("fichero.txt","wt") #función open devuelve un puntero al fichero
#Nota: Si existe, lo sobreescribe vacío.
#Escribimos el fichero
ficher.write("somos los mejores")
#Cerramos el fichero
fichero.close()
#Nota1: Validamos si está lleno a través explorador de archivos.
#Nota2: Si sólo queremos crear un archivo vacío y cerrarlo: open("fichero.txt", "wt").close()
#Ejemplo 02: Dado el siguiente fichero de texto en el path actual, abrirlo e imprimir lo que contiene.
#fichero.txt
#somos los mejores
#Lo abrimos en modo lectura (r:read) y de tipo texto (t:texto)
fichero = open('fichero.txt',"rt") #función open devuelve un puntero al fichero
#Obtenermos lo que tiene el archivo fichero
datos = fichero.read()
#Imprimimos por pantalla
print(datos)
#somos los mejores
#Ejemplo 03: Dado el siguiente fichero de texto en el path actual, abrirlo y a continuación de lo que contiene, agregarle la frase "del universo".
#fichero.txt
#somos los mejores
#Lo abrimos en modo incluir (a:append) y de tipo texto (t:texto)
fichero = open('fichero.txt','at')
#Incluimos la frase con el salto de línea "\n"
fichero.write("\ndel universo")
#Cerramos el fichero
fichero.close()
#Nota: Validamos a través explorador de archivos que el archivo diga:
#somos los mejores
#del universo
#Un archivo binario es un archivo que contiene información de cualquier tipo, codificada en binario para el propósito de almacenamiento y procesamiento en ordenadores. Por ejemplo los archivos que almacenan texto formateado o fotografías, así como los archivos ejecutables que contienen programas. (No se pueden ver correctamente directamente con notepad)
#Ejemplo 01: Crear un fichero binario, y grabar dentro una lista de colores.
#Importamos la librería para trabajar con binarios
import pickle
#Lo creamos en modo escritura (w:write) y de tipo binario (b:binary)
fichero = open("fichero.txt","wb")
colores = ['rojo', 'morado', 'plomo']
#Escribimos el fichero
pickle.dump(colores,fichero)
#Cerramos el fichero
fichero.close()
#Nota: A través del explorador de archivos, al abrir el archivo vemos esto:
#�]q
#Ejemplo 02: Dado el arhivo creado en el ejemplo anterior, leer el archivo binario e imprimirlo por pantalla.
#Importamos la librería para trabajar con binarios
import pickle
#Lo abrimos en modo lectura (r:read) y de tipo binario (b:binary)
fichero = open("fichero.txt","rb")
datos = pickle.load(fichero)
print(datos)
#['rojo', 'morado', 'plomo']
#Listas por compresión: Hay dos manera de definir los elementos que pertenecen a un conjunto en matemáticas, por extensión o por comprensión. Cuando se define un conjunto por extensión cada elemento se enumera de manera explícita.
#Ejemplo por extensión: A={1,2,3,4}
#Ejemplo por compresión: B={x | x pertenece a los primeros 4 números enteros}
#En las listas es lo mismo.
#Ejemplo 01: Crear una lista por compresión de 0 a 9 e imprimirla.
a = [ i for i in range(10)]
print(a) # [0,1,2,3,4,5,6,7,8,9]
#Ejemplo 02: Crear una lista por compresión de 0 a 5, pero mantener el range(10), y luego imprimirla.
#Tips: Usar filtros (if)
a = [ i for i in range(10) if i <= 5]
print(a) # [0,1,2,3,4,5]
#Ejemplo 03: Crear una lista por compresión con los cuadrados de los valores del 0 al 4.
a = [ i**2 for i in range(5)]
print(a) # [0, 1, 4, 9, 16]
#Ejemplo 04: Qué es lo que se imprime en las siguientes líneas de código?
a = [ elemento for elemento in [10,20,30]]
print(a) # [10, 20, 30]
b = [ "Hola" for elemento in [10,20,30]]
print(b) # ['Hola', 'Hola', 'Hola']
c = [ [10,20,30] for elemento in [10,20,30]]
print(c) # [[10, 20, 30], [10, 20, 30], [10, 20, 30]]
d = [ elemento for letra in ['a','b','c'] for elemento in letra]
print(d) # ['a', 'b', 'c']
#Nota: Acá primero se evalúa "letra in ['a','b','c']" para identificar la lista letra
#Luego es como si tuviéramos nuevamente "elemento for elemento in letra"
e = [ numero for sublista in [[10,20,30],[40,50,60]] for numero in sublista]
print(e) # [10, 20, 30, 40, 50, 60]
#Nota: Acá primero se evalúa "for sublista in [[10,20,30],[40,50,60]]" para identificar la lista sublista
#Luego es como si tuviéramos nuevamente "numero for elemento in sublista"
#MODULOS
#Un módulo es un fichero que contiene código PYTHON. Su extensión es ".py". Almacena declaración de variables,clases, constantes e implementación de funciones.
#Ejemplo 01: Crear un módulo con 2 funciones llamado mod_adv
#**************************************************************
#Creamos un archivo llamado mod_adv.py y dentro:
def saludar():
print("Hola Universo")
def sumar(n1,n2):
return n1+n2
#Ejemplo 02: Llamar al módulo creado en el Ejemplo 01 y ejecutar ambas funciones
#**************************************************************
#Creamos un archivo llamado llamar_modulo.py y dentro:
#Con esta línea importamos el módulo
import mod_adv
mod_adv.saludar() #Hola Universo
print(mod_adv.sumar(3,4)) #7
#Ejemplo 03: Llamar al módulo creado con un alias llamado "x" y ejecutar ambas funciones
#**************************************************************
import mod_adv as x
x.saludar() #Hola Universo
print(x.sumar(3,4)) #7
#Nota: Este alias (as) reemplaza al módulo, pero también se aplica con funciones.
#Ejemplo 04: Llamar al módulo creado y llamar a sus funciones sin poner el nombre del módulo antes o un alias.
#**************************************************************
#Desde el módulo traer estas funciones separadas por ","
from mod_adv import saludar, sumar
#Al llamarlas ya no es necesario una palabra antes de llamar a la función
saludar() # Hola Universo
print(sumar(3, 4)) # 7
#Nota: Opcional: "from mod_adv import *" (Si son muchas funciones, se vuelve un poco pesada la llamada, si sólo utilizaremos sólo algunas)
#Ejemplo 05: Llamar a un módulo de un módulo cargado.
#**************************************************************
#Creamos un archivo llamado mod_adv0.py y dentro:
def saludar2():
print("Hola Universo 2")
def sumar2(n1,n2):
return n1+n2
#Creamos un archivo llamado mod_adv.py y dentro:
import mod_adv0
def saludar():
print("Hola Universo")
def sumar(n1,n2):
return n1+n2
#Creamos un tercer archivo llamado llamar_modulo.py con:
from mod_adv import mod_adv0 #Acá se llama el módulo interno de mod_adv
mod_adv0.saludar2() #Hola Universo 2
#Nota: No es posible importarlo con * ya que es un módulo externo.
#Ejemplo 06: Crear una carpeta llamada modulo y dentro de ella un archivo llamada saludo.py que contenga lo siguiente:
def saludo1():
print("saludo1")
def saludo2():
print("saludo2")
def saludo3():
print("saludo3")
#Luego fuera de la capera modulo, crear un archivo llamado nuevo.py que importe saludo.py y que traiga las 3 funciones directamente.
from modulo.saludo import saludo1,saludo2,saludo3
saludo1() #saludo1
saludo2() #saludo2
saludo3() #saludo3
#PIP
#pip es un sistema de gestión de paquetes utilizado para instalar y administrar módulos de software escritos en Python. (Adicionales a los que python trae al instalarlo, o a los creados por nosotros)
#Ejemplo 01: Desde la consola de windows (cmd) ver la versión instalada
pip --version #pip 20.2.2 from path
#Ejemplo 02: Desde la consola de windows (cmd) ver los módulos instalados
pip list #Lista de todos los nombre de los módulos y sus versiones
#Ejemplo 03: Desde el consola de windows (cmd) actualizar pip a su última versión
python -m pip install --upgrade pip
#Ejemplo 04: Desde el consola de windows (cmd) buscar librerías externas que tengan relación con jupyterlab
pip search jupyterlab
#Ejemplo 05: Desde la consola de windows (cmd) instalar el módulo jupyterlab
pip install jupyterlab #Para ejecutarlo por consola: "python jupyter lab"
#Ejemplo 06: Desde la consola de windows (cmd) mostrat información de jupyterlab
pip show jupyterlab
#Ejemplo 07: Desde la consola de windows (cmd) desinstalar el módulo jupyterlab
pip uninstall jupyterlab
#Ejemplo 08: En un archivo de texto listar todos los paquetes instalados, y luego suponer que estamos en otro equipo o en otro enterno virtual e instalarlos.
pip freeze > lista.txt #Genera el archivo txt
pip install -r lista.txt #Instala exactamente los mismos módulos y versiones
#virtualenv
#Un entorno virtual, es un entorno que está aislado de su sistema, el cual tiene las siguientes ventajas:
#1) Aislar de librerías de prueba un ambiente de producción.
#2) Fácil de replicar los módulos exactos que se requieren para un proyecto particular.
#3) Probar rapidamente proyector en otros enternos con versiones diferentes a las instaladas.
#Sugerencia: Crear un entorno virtual por cada nuevo proyecto.
#Ejemplo 01: Instalar el módulo para crear los enternos virtuales.
pip install virtualenv
#Ejemplo 02: Crear un enterno virtual
#Lanzar virtualenv
#En su símbolo del sistema, navegue hasta su proyecto:
cd your_project
#Dentro de su proyecto:
virtualenv env
#Activa tu virtualenv:
#en Windows, virtualenv crea un archivo por lotes
\env\Scripts\activate.bat
#para activar virtualenv en Windows, activar script está en la carpeta Scripts:
\path\to\env\Scripts\activate
#Ejemplo:
C:\Users\'Username'\venv\Scripts\activate.bat
#Fuente: https://programwithus.com/learn-to-code/Pip-and-virtualenv-on-Windows/
#Múdulo os (Viene interno en Python, no es necesario instalarlo)
#El módulo os nos permite acceder a funcionalidades dependientes del Sistema Operativo. Sobre todo, aquellas que nos refieren información sobre el entorno del mismo y nos permiten manipular la estructura de directorios.
#Ejemplo 01: Identificar en que path nos encontramos
#Cargamos el módulo
import os
#Imprimi el path actual
print(os.getcwd()) #'c:\\Users\\Alberto\\Desktop\\practica'
#Ejemplo 02: Crear una carpeta de nombre "ok"
#Cargamos el módulo
import os
#Creamos la carpeta "region" en el path actual
os.mkdir("ok")
#Forma alternativa, es indicar el path completo
path = os.getcwd() #Path actual C:\Users\Alberto\Desktop\practica
carpeta = "ok" #Nombre carpeta
#os.path.join une el path con el nombre de la carpeta separados por \
path_completo = os.path.join(path,carpeta) #C:\Users\Alberto\Desktop\practica\ok
os.mkdir(path_completo)
#Ejemplo 03: Crear la capeta "region" en nuestro path actual, y crear dentro de ella, 16 carpetas de nombre reg_01 a reg_16.
#Cargamos el módulo
import os
#Nos movemos de directorio
path = os.getcwd() #Path actual C:\Users\Alberto\Desktop\practica\
carpeta = "region" #Nombre carpeta
path_completo = os.path.join(path,carpeta) #C:\Users\Alberto\Desktop\practica\region
os.mkdir(path_completo) #Creamos la carpeta
#Cambia del directorio actual a dentro de la carpeta región
os.chdir(path_completo)
#Validamos si se cambió el path
print(os.getcwd()) #'c:\\Users\\Alberto\\Desktop\\practica\\region'
#Creamos las 16 carpetas reg_01 al reg_16
for indice, valor in enumerate(range(16),1):
for indice, valor in enumerate(range(16), 1):
if 0 < indice <= 9:
os.mkdir("reg_0"+str(indice))
if 9 < indice <= 16
os.mkdir("reg_"+str(indice))
#Ejemplo 04: Usando el módulo OS:
#1) Listar todos los archivos de la carpeta actual
#2) Crear y eliminar un archivo
#3) Crear varias carpetas dentro de otras, con un path específico
#Cargamos el módulo
import os
#1) - Listar todos los archivos de la carpeta actual
lista = os.listdir(os.getcwd())
for elemento in lista:
print(elemento)
#2) - Crear y eliminar un archivo de texto.
archivo = 'archivo.txt'
path = os.path.join(os.getcwd(), archivo)
#Creamos el archivo vacío
open(archivo, 'wt').close()
print("Se creo el archivo.txt")
#Eliminamos el archivo
os.remove(path)
print("Se eliminó el archivo.txt")
#Damos un tiempo para ver la salida
os.system('pause')
#3) - Crear varias carpetas dentra de otras con un path específico
print("Actualmente se está en " + os.getcwd())
#Definimos un path específico
ruta_rec = 'carpeta1\\carpeta2\\carpeta3\\alberto' #Ninguna de estas existe
#Generamos el path completo
path = os.path.join(os.getcwd(), ruta_rec)
#Con esta línea creamos todas las carpetas
os.makedirs(path)
print("listo")
os.system('pause')
#Este módulo proporciona operaciones de coincidencia de expresiones regulares, que a menudo son llamadan también regex, que son unas secuencias de caracteres que forma un patrón de búsqueda los cuales se aplican a cadenas de texto, listas entre otros.
#Ejemplo 01: Dada la siguiente cadena, encontrar en cualquier parte, la subcadena consecutiva "exp" y analizar todas las posibles salidas.
#Tips: Usar search(), el cual escanea todo el texto buscando cualquier ubicación donde haya una coincidencia, y nos devuelve un objeto.
import re
cadena = "Vamos a aprender expresiones regulares"
#Indices 012345..........17
busqueda = re.search("exp", cadena)
#Al imprimir, se ve el objeto devuelto
print(busqueda) #<re.Match object; span=(17, 20), match='exp'>
#Método start devuelve la posición inicial de la coincidencia
print(busqueda.start())#17
#Método end devuelve la posición final de la coincidencia
print(busqueda.end())#20
#Método span devuelve una tupla con la posición inicial y final de la coincidencia.
print(busqueda.span())#(17,20)
#Método group devuelve el texto que coincide con la expresion regular.
print(busqueda.group())#exp
#Nota: De no haber coincidencia, devolverá un "None"
#Ejemplo 02: Dada la siguiente cadena, encontrar las veces que aparece la subcadena "Alber".
#Tips: Usar findall(), la cual encuentra todos los subtextos donde haya una coincidencia y nos devuelve estas coincidencias como una lista.
import re
cadena = "Vamos a aprender expresiones regulares con Alberto. Alberto hará varios ejemplos."
busqueda = re.findall("Alber", cadena)
print(busqueda) #['Alber', 'Alber']
print(len(busqueda)) #2
#Ejemplo 03: Dada la siguiente lista, encontrar:
#1) Elementos que inician con "Al". |Tips usar caracter ^ para buscar al inicio
#2) Elementos que terminen con "an" |Tips usar caracter $ para buscar al final
#3) Elementos que contengan "c" o "C" |Tips usar caracter [] para caracteres por separado
#4) Elementos que inicien con "C" o "c", que al medio tengan "laudi" y que terminen en "o" o en "a"
#5) Elementos que contengan le letra "A","B" o "C" en cualquier parte |Tips usar caracter [desde-hasta]
#6) Elementos que NO contengan le letra "A","B" o "C" en cualquier parte |Tips usar caracter [^desde-hasta]
#Tips: Usar findall, la cual encuentra todos los subtextos donde haya una coincidencia y nos devuelve estas coincidencias como una lista.
import re
lista = ['Alberto', 'alberto', 'Juan','juan','Claudio','claudia']
#1 - Elemento que inician con "Al". |Tips usar caracter ^ para buscar al inicio
for elemento in lista:
if re.findall('^Al', elemento):
print(lemento) #Alberto |Nota: Es sensible a mayusculas, alberto no lo encuentra
#2 - Elementos que terminen con "an" |Tips usar caracter $ para buscar al final
for elemento in lista:
if re.findall('an$', elemento):
print(elemento) #Juan juan
#3 - Elementos que contengan "c" o "C" |Tips usar caracter [] para caracteres por separado
for elemento in lista:
if re.findall('[cC]', elemento):
print(elemento) #Claudio claudia
#4 - Elementos que inicien con "C" o "c", que al medio tengan "laudi" y que terminen en "o" o en "a"
for elemento in lista:
if re.findall('[cC]laudi[oa]', elemento):
print(elemento) #Claudio claudia
#5 - Elementos que contengan le letra "A","B" o "C" en cualquier parte |Tips usar caracter [desde-hasta]
for elemento in lista:
if re.findall('[A-C]', elemento):
print(elemento) #Alberto Claudio
#6 - Elementos que NO contengan le letra "A","B" o "C" en cualquier parte |Tips usar caracter [^desde-hasta]
if re.findall('[^A-C]', elemento):
print(elemento) #claudia
#Ejemplo 04: Dada la siguiente lista, encontrar:
#1) Que inicie con "Alb"
#2) Que inicie con "Alb" o con "alb" |Tips usar el operador . que reemplaza cualquier caracter.
#3) Que inicie con "Alb" o con "alb" |Tips el tercer parametro re.IGNORECASE
#Tips: Usar match(), el cual determinada si la regex tiene coincidencias en el comienzo del texto. Devuelve un objeto.
import re
lista = ['Alberto', 'alberto', 'Juan','juan','Claudio','claudia']
#1 - Que inicie con "Alb"
for elemento in lista:
if re.match('Alb', elemento):
print(elemento) #Alberto
#2 - Que inicie con "Alb" o con "alb" |Tips usar el operador . que reemplaza cualquier caracter.
for elemento in lista:
if re.match('.lb', elemento):
print(elemento) #Alberto alberto
#3 - Que inicie con "Alb" o con "alb" |Tips el tercer parametro re.IGNORECASE
for elemento in lista:
if re.match('Alb', elemento,re.IGNORECASE):
print(elemento) #Alberto alberto
#Ejemplo 05: Dada la siguiente lista, encontrar:
#1) Que contenga 4 números consecutivos.
#2) Que no considere los elementos que son sólo números
#3) Que contenga espacios en blanco o \t\n\r\f\v
#4) Que no considere los elementos que son sólo números espacios o \t\n\r\f\v
#5) Que contenga caracteres alfanuméricos
#6) Que NO contenga caracteres alfanuméricos
#Tips: Usar las siguientes secuencias especiales:
#\d Encuentra cualquier número, igual que [0-9]
#\D Encuentra cualquier carácter que NO sea número, igual que [^0-9]
#\s Encuentra cualquier espacio en blanco, igual que [ \t\n\r\f\v]
#\S Encuentra cualquier carácter que NO sea espacio en blanco, igual que [^ \t\n\r\f\v]
#\w Encuentra cualquier carácter alfanumérico, igual que [a-zA-Z0-9_]
#\W Encuentra cualquier carácter NO alfanumérico, igual que [^a-zA-Z0-9_]
import re
lista = ['..','\t','123','Alberto1249', '2albe rto', 'Jua\tn','juan','Claudio5','claudia']
#1 - Que contenga 4 números consecutivos.
for elemento in lista:
if re.findall('\d\d\d\d', elemento):
print(elemento) #Alberto1249
#2 - Que no considere los elementos que son sólo números
for elemento in lista:
if re.findall('\D', elemento):
print(elemento)#Alberto1249 2albe rto Jua n juan Claudio5 claudia
#3 - Que inicie con "Alb" o con "alb" |Tips el tercer parametro re.IGNORECASE
for elemento in lista:
if re.findall('\s', elemento):
print(elemento) #2albe rto Jua n
#4 - Que no considere los elementos que son sólo números espacios o \t\n\r\f\v
for elemento in lista:
if re.findall('\S', elemento):
print(elemento) #.. 123 Alberto1249 2albe rto Jua n juan Claudio5
#5 - Que contenga caracteres alfanuméricos
for elemento in lista:
if re.findall('\w', elemento):
print(elemento) #123 Alberto1249 2albe rto Jua n juan Claudio5 claudia
#6 - Que no considere los elementos que son sólo números espacios o \t\n\r\f\v
for elemento in lista:
if re.findall('\W', elemento):
print(elemento) #.. \t 2albe rto Jua n
#Ejemplo 06: Dada la siguiente lista, encontrar:
#1) Que contenga o no un "." | Nota: Usar \ para evitar que el punto actue como comodín.
#2) Que contenga al menos una vez un "." | Nota: Usar \ para evitar que el punto actúe como comodín.
#3) Que termine con un "." y luego de 2 a 3 caracteres alfanumericos.
#4) Que valide un correo:
# a) Que inicie al menos con un un caracter alfanumérico en minúsculas.
# b) Luego que pueda o no tener un caracter "." o "_"
# c) Luego que contenga al menos un caracter alfanumérico en minúsculas.
# d) Luego que contenga un "@"
# e) Luego que contenga al menos un caracteres alfanumérico.
# f) Que termine con un "." y 2 o 3 caracteres alfanuméricos.
#Tips: Usar los cuantificadores
#?: coincide con cero o al menos una ocurrencia del último caracter del patrón.
#+: coincide al menos una vez con el patrón.
#*: coincide con cero o más ocurrencias del patrón.
#{x}: coincide con exactamente x ocurrencias del patrón
#{x, y}: coincide con al menos x y no más de y ocurrencias.
import re
lista = ['Hola@Hola.com','hola@hola.cl','hola@hola.clcl','Hola!','hola','haola!','a1','aa','aaa','aaaa','HolaHola']
#1 - Que contenga o no un "." | Nota: Usar \ para evitar que el punto actúe como comodín
for elemento in lista:
if re.findall('[\.]?', elemento):
print(elemento) #Hola@Hola.com|hola@hola.cl|hola@hola.clcl|Hola!|hola|haola!|a1|aa|aaa|aaaa|HolaHola|
#2 - Que contenga al menos una vez un "." | Nota: Usar \ para evitar que el punto actúe como comodín.
for elemento in lista:
if re.findall('[\.]+', elemento):
print(elemento) #Hola@Hola.com|hola@hola.cl|hola@hola.clcl|
#3 - Que termine con un "." y luego de 2 a 3 caracteres alfanuméricos.
for elemento in lista:
if re.findall('[\.]\w{2,3}$', elemento):
print(elemento) #Hola@Hola.com|hola@hola.cl|
#4 - Que valide un correo
for elemento in lista:
if re.findall('^[a-z0-9]+[\._]?[a-z0-9]+[@]\w+[\.]\w{2,3}$', elemento):
print(elemento) #hola@hola.cl
#El módulo random de la librería estándar de Python incluye un conjunto de funciones que permiten obtener de distintos números "aleatorios" o, para ser rigurosos, pseudoaleatorios. (Finalmente son secuencias que al cabo de largo tiempo, volverán a repetirse)
#Ejemplo 01: Importa la librería random y generar un número "aleatorio" entre 0 y 10"
import random
numero = random.randint(0,10)
print(numero)
#Modulo TKINTER (*.pyw)
#Detalle de la librería
#https://docs.python.org/3/library/tk.html
#Ejemplo 01: Crear nuestra primera ventana
#Inicio*****************************************
#Cargamos el módulo
import tkinter
#Creamos la ventana principal
ventana = tkinter.Tk()
#Loop infinito para ver la ventana
ventana.mainloop()
#Fin********************************************
#Ejemplo 02: Crear ventana con:
#Ancho:400 y Alto:400
#Sin poder cambiar ancho y alto
#Título: Cualquier cosa
#Color de fondo: Negro
#Inicio*****************************************
import tkinter
#Creamos la ventana principal
ventana = tkinter.Tk()
#Ancho y Alto de la ventana
ventana.geometry("400x400")
#Fijar el ancho y alto (Ancho,Alto)
ventana.resizable(False,False)
#Ponemos título a la ventana
ventana.title("Cualquier cosa")
#Color de fondo negro en Hexadecimal
ventana.config(bg = "#000000")
#Loop necesario para mostrar la ventana en el tiempo
ventana.mainloop()
#Fin********************************************
#Ejemplo 03: Tomar el mismo ejemplo anterior y agregarle:
#Lienzo sobre la ventana
#Lienzo Ancho:350 y Alto:350
#Lienzo color Cafe hexadecimal
#Sobre el lienzo el cursor cambie a una mano
#Inicio*****************************************
import tkinter
#Creamos la ventana principal
ventana = tkinter.Tk()
#Ancho y Alto de la ventana
ventana.geometry("400x400")
#Fijar el ancho y alto (Ancho,Alto)
ventana.resizable(False,False)
#Ponemos título a la ventana
ventana.title("Cualquier cosa")
#Color de fondo Hexadecimal
ventana.config(bg = "#000000")
#Creamos el lienzo
lienzo = tkinter.Frame()
#Cargamos el lienzo a la ventana
lienzo.pack()
#Definimos el ancho y largo del lienzo
lienzo.config(width = "350", height="350")
#Color del fondo al lienzo
lienzo.config(bg = "#595959")
#Cursor sobre lienzo
lienzo.config(cursor = "hand2")
#Loop necesario para mostrar la ventana en el tiempo
ventana.mainloop()
#Fin********************************************
#Ejemplo 04: Generar un VENTANA con un label tipo TEXTO y uno tipo FOTO:
#Inicio*****************************************
# Importamos el módulo
import tkinter
# Creamos la ventana
ventana = tkinter.Tk()
# Creamos el lienzo
lienzo = tkinter.Frame(ventana, width=500, height=500)
# Cargamos el lienzo en la ventana
lienzo.pack()
# Imagen (Debemos tener esta foto en nuestra carpeta raíz)
foto = tkinter.PhotoImage(file="python.png")
# Creamos el label foto
label_texto = tkinter.Label(
lienzo, text="LOGO DE PYTHON", fg="blue")
# Cargamos el label de texto en el lienzo en una posición puntual
label_texto.place(x=180, y=0)
# Creamos el label foto
label_foto = tkinter.Label(
lienzo, image=foto)
# Cargamos el label de foto en el lienzo en una posición puntual
label_foto.place(x=100, y=50)
# Generamos el loop de la ventana
ventana.mainloop()
#Fin********************************************
#Ejemplo 05: Generar un VENTANA con:
#Tres entradas de TEXTO separados entre sí en horizontal y vertical
#Tres LABEL centrados uno a la izquierda centro y derecha
#Usar grid para posicionarlos uno abajo del otro
#Inicio*****************************************
# Importamos el módulo
import tkinter
# Creamos el objeto ventana
ventana = tkinter.Tk()
# Creamos el lienzo
lienzo = tkinter.Frame(ventana)
# Cargamos el lienzo a la ventana
lienzo.pack()
# Nota:
# Grid se usa para posicionar en una matriz los elementos (row/column)
# sticky centro las label a la izquierda o derecha (w: oste/ e:este)
# padx y pady da espacio entre el elemento y contenedor, en eje horizontal o vertical
# Generamos y cargamos el label Nombre al lienzo
labelNombre = tkinter.Label(lienzo, text="Nombre:")
labelNombre.grid(row=0, column=0, sticky="w")
# Creamos y cargamos el cuadro de texto Nombre al lienzo
textoNombre = tkinter.Entry(lienzo)
textoNombre.grid(row=0, column=1, padx=10, pady=10)
# Generamos y cargamos el label Apellido al lienzo
labelApellido = tkinter.Label(lienzo, text="Apellido de la Persona:")
labelApellido.grid(row=1, column=0)
# Creamos y cargamos el cuadro de texto Apellido al lienzo
textoApellido = tkinter.Entry(lienzo)
textoApellido.grid(row=1, column=1, padx=10, pady=10)
# Generamos y cargamos el label Run al lienzo
labelRun = tkinter.Label(lienzo, text="Run:")
labelRun.grid(row=2, column=0, sticky="e")
# Creamos y cargamos el cuadro de texto Run al lienzo
textoRun = tkinter.Entry(lienzo)
textoRun.grid(row=2, column=1, padx=10, pady=10)
# Loop infinito de la ventana
ventana.mainloop()
#Fin********************************************
#Ejemplo 06: Generar un TEXTAREA con:
#Un label principal
#Un scroll del largo del text área
#Ajustar el scroll al texto ingresado
#Inicio*****************************************
#Agregar módulo
import tkinter
#Crear objeto ventana
ventana = tkinter.Tk()
#Crear el lienzo
lienzo = tkinter.Frame(ventana)
#Cargar el lienzo a la ventana
lienzo.pack()
#Crear el label de textArea
labelArea = tkinter.Label(lienzo, text="Ingrese un comentario:")
labelArea.grid(row=0, column=0, sticky="w")
#Creamos el text área
textArea = tkinter.Text(lienzo, width=30, height=10)
textArea.grid(row=1, column=0)
#Cargamos un scroll lateral al text área del largo del área
scrolltextArea = tkinter.Scrollbar(lienzo, command=textArea.yview)
scrolltextArea.grid(row=1, column=1, sticky="nsew")
#El scroll lo ajustamos a la escritura
textArea.config(yscrollcommand=scrolltextArea.set)
#Ventana en bucle
ventana.mainloop()
#Fin********************************************
#Ejemplo 07: Generar un BOTON con:
#Al pincharlo despliegue mensaje
#EL mensaje con título y contenido
#Inicio*****************************************
#Cargamos el módulo
import tkinter
#Traemos función para mostrar mensaje por pantalla
from tkinter import messagebox
#Creamos el objeto ventana
ventana = tkinter.Tk()
#Creamos el objeto lienzo
lienzo = tkinter.Frame(ventana)
#Cargamos el lienzo en la ventana
lienzo.pack()
#Función que se ejecutará al pinchar el botón
def saludar():
msg = messagebox.showinfo("Título", "Hola")
#Creamos el botón con un texto y asociado a una función
boton = tkinter.Button(lienzo, text="Enviar Dados", command=saludar)
#Cargamos el botón en el lienzo en un lugar específico
boton.grid(row=0, column=0)
#Ventana loop
ventana.mainloop()
#Fin********************************************
#Ejemplo 08: Generar un RADIO BUTTON con:
#Label como título
#2 opciones tipo botón
#Al pinchar cualquiera salga un mensaje respectivo
#Los botones se muestren en horizontal
#Inicio*****************************************
# Importamos el módulo
import tkinter
# Generamos la ventana
ventana = tkinter.Tk()
# Generamos el lienzo y lo cargamos en la ventana con grid (matriz)
lienzo = tkinter.Frame(ventana).grid()
# Generamos una variable que guardará el valor de la opción marcada del radio button
opcion = tkinter.IntVar()
# Función que es llamada al pinchar cualquier opción del radio button
def funImprimir():
if opcion.get() == 1:
etiqueta.config(text="Seleccionaste op1")
else:
etiqueta.config(text="Seleccionaste op2")
# Se genera un label como título del radio button centrado en 2 columnas
tkinter.Label(lienzo, text="Selecciona opción:").grid(
row=0, column=0, columnspan=2)
# Generamos 2 opciones en radio button, cargadas en el lienzo,
# asociadas a la variable opción y llamamos a la función Imprimir
# Cargamos Radio Button al lienzo / lo asociamos a la variable opción / definimos su valor / llamamos función
op1 = tkinter.Radiobutton(
lienzo, text="Opción1", variable=opcion, value=1, command=funImprimir)
# Con indicator como falso queda tipo botón, con verdadero queda como un punto / bd es el ancho del borde
op1.config(indicatoron=0, bd=5)
# Lo cargamos al lienzo como grid
op1.grid(row=1, column=0)
# Cargamos Radio Button al lienzo / lo asociamos a la variable opción / definimos su valor / llamamos función
op2 = tkinter.Radiobutton(
lienzo, text="Opción2", variable=opcion, value=2, command=funImprimir)
# Con indicatoron como falso (0) queda como tipo botón, con verdadero (1), queda como un punto / bd es el ancho del borde
op2.config(indicatoron=0, bd=5)
# Lo cargamos al lienzo como grid
op2.grid(row=1, column=1)
# Generamos una etiqueta en blanco para rellenar de acuerdo a la opción marcada, con un ancho de 2 columnas
etiqueta = tkinter.Label(lienzo)
etiqueta.grid(row=2, column=0, columnspan=2)
# Loop de la ventana
ventana.mainloop()
#Fin********************************************
#Ejemplo 09: Generar un CHECK BUTTON con:
#Ventana con ancho y alto, junto con un título
#3 checkbutton opt1/opt2/opt3
#Label como título
#Al pinchar cualquiera salga un mensaje respectivo concatenado
#Inicio*****************************************
# Importamos el módulo
import tkinter
# Generamos la ventana
ventana = tkinter.Tk()
ventana.title("Título")
# Generamos el lienzo con un ancho y altura y lo cargamos a la ventana
lienzo = tkinter.Frame(ventana, width=200, height=40).pack()
# Generamos un Label que recibirá el mensaje de lo que está marcado al inicio
mensaje = tkinter.Label(lienzo)
# Cargamos el label al lienzo
mensaje.pack()
# Generamos un Label de título
tkinter.Label(lienzo, text="Marca una o varias opciones:").pack()
# Generamos 1 variable por cada checkbutton que guarde su estado (marcado o no)
opcion1 = tkinter.IntVar()
opcion2 = tkinter.IntVar()
opcion3 = tkinter.IntVar()
# Función llamada al marcar cada checkbutton
def funVer():
# Mensaje en blanco que recibirá las opciones
msj = ""
# Depende lo que se marque se concatena una respuesta
if opcion1.get() == 1:
msj += " opt1"
if opcion2.get() == 1:
msj += " opt2"
if opcion3.get() == 1:
msj += " opt3"
# Imprimimos en el label lo que esté marcado
mensaje.config(text=msj)
# Creamos los 3 checkbutton asociados a sus variables y a la función funVer y los cargamos al lienzo
tkinter.Checkbutton(lienzo, text="op1", variable=opcion1,
command=funVer).pack()
tkinter.Checkbutton(lienzo, text="op2", variable=opcion2,
command=funVer).pack()
tkinter.Checkbutton(lienzo, text="op3", variable=opcion3,
command=funVer).pack()
# ventana loop
ventana.mainloop()
#Fin********************************************
#Ejemplo 10: Generar un COMBOBOX con:
#Un label como título
#Sin valor por defecto para el combo
#Que muestre 4 opciones
#Al seleccionarlo se imprima la región por consola
#Inicio*****************************************
#Importamos el módulo
import tkinter
#Importamos módulo donde se encuentra el combo
from tkinter import ttk
#Generamos la ventana
ventana = tkinter.Tk()
#Generamos el lienzo y lo cargamos a la ventana
lienzo = tkinter.Frame(ventana).pack()
# Generamos un label y lo cargamos el lienzo
tkinter.Label(lienzo, text="Elige una Región:").pack()
# Función que se llamará al cambiar el combo
def funVerOpcion(object):
# Imprimirá el mes por consola
print("Tu opción fue:", comboBox.get())
# Generamos el combo con sus valores
comboBox = ttk.Combobox(lienzo,
values=[
"Reg01",
"Reg02",
"Reg03",
"Reg04"])
# Cargamos el combo al lienzo
comboBox.pack()
# Opción para fijar una valor por defecto
# comboBox.current(3)
# Llamos a una función si hay cambio en el combo
comboBox.bind("<<ComboboxSelected>>", funVerOpcion)
# ventana loop
ventana.mainloop()
#Fin********************************************
#Ejemplo 11: Generar un BOTON que referencie a un archivo en el PC:
#Utilizar módulo filedialog a través de un botón con nombre "Cargar archivo"
#El cuadro de dialogo que lleve título "Somos los mejores"
#EL cuadro de dialogopPermita cargar sólo archivos *.csv y *.py
#El cuadro de dialogo se abra en el path en donde ejecutas el código
#El path completa al archivo que se muestre por consola
#Inicio*****************************************
# Importamos el módulo
import tkinter
# Importamos el módulo dentro del módulo
from tkinter import filedialog
# Generamos la ventana
ventana = tkinter.Tk()
# Función llamada desde el botón
def funCargar():
# initialdir=Path de donde verá los archivos
# filetypes=Tupla que permite ver sólo algunas extensiones de archivos
file = filedialog.askopenfilename(
title="Somos los mejores", initialdir=".", filetypes=(("Archivos csv", "*.csv"), ("Archivos python", "*.py")))
# Imprimer por consola el Path completado al archivo.extension
print(file)
# Generamos el botón y lo cargamos a la ventana
boton = tkinter.Button(ventana, text="Cargar archivo", command=funCargar).pack()
# Loop de la ventana
ventana.mainloop()
#Ejemplo 12: Generar un MENU sobre la ventana que:
#Utilice el módulo messagebox para mostrar todos los tipos de mensajes por pantalla
#Tenga 3 botones en la parte superior
#Como hijos tenga varios botones, y al menos uno con un separador
#Nota: Los mensajes por pantalla, que muestren por consola, la opción seleccionada
# Importamos el módulo
import tkinter
# Importmos la lebrería de mensajes
from tkinter import messagebox
# Generamos la ventana
ventana = tkinter.Tk()
# Funciones
def funInfo():
# Mensajes informativos
msj1 = messagebox.showerror("Título", "Contenido")
msj2 = messagebox.showinfo("Título", "Contenido")
msj3 = messagebox.showwarning("Título", "Contenido")
# Mensajes Interactivos
msj4 = messagebox.askokcancel("Título", "Contenido")
print(msj4) # Salida True/False /ventana.destroy por si queremos salir en un if
msj5 = messagebox.askquestion("Título", "Contenido")
print(msj5) # Salida yes/no /ventana.destroy por si queremos salir en un if
msj6 = messagebox.askretrycancel("Título", "Contenido")
print(msj6) # Salida True/False /ventana.destroy por si queremos salir en un if
msj7 = messagebox.askyesno("Título", "Contenido")
print(msj7) # Salida True/False /ventana.destroy por si queremos salir en un if
msj8 = messagebox.askyesnocancel("Título", "Contenido")
# Salida True/False/None /ventana.destroy por si queremos salir en un if
print(msj8)
# Generamos el Menú
barra = tkinter.Menu(ventana)
# Asociamos el menu a la ventana
ventana.config(menu=barra)
# Definir cuantos elementos tendrá el menú
# tearoff = 0 elimina las líneas punteadas
menu1 = tkinter.Menu(barra, tearoff=0)
menu2 = tkinter.Menu(barra, tearoff=0)
menu3 = tkinter.Menu(barra, tearoff=0)
# Asignarle nombre en el ventana y asociarlo a la variable interna
barra.add_cascade(label="Menu_1", menu=menu1)
barra.add_cascade(label="Menu_2", menu=menu2)
barra.add_cascade(label="Menu_3", menu=menu3)
# Agregamos elemento a menu1
menu1.add_command(label="Mensajes", command=funInfo)
menu1.add_command(label="Hijo2")
menu1.add_command(label="Hijo3")
# Agregamos elemento a menu2
menu2.add_command(label="Hijo1")
menu2.add_command(label="Hijo2")
menu2.add_command(label="Hijo3")
menu2.add_separator() # Línea separadora
menu2.add_command(label="Hijo4")
menu2.add_command(label="Hijo5")
menu2.add_command(label="Hijo6")
# Agregamos elemento a menu3
menu3.add_command(label="Hijo1")
menu3.add_command(label="Hijo2")
menu3.add_command(label="Hijo3")
# ventana loop
ventana.mainloop()
#POO
#La programación orientada a objetos (POO, u OOP según sus siglas en inglés) es un paradigma de programación que viene a innovar la forma de obtener resultados. Traslada la natuleza de los objetos de la vida real al código de programación.
#Ventajas
#-------------------
#Código reutilizable / Modularización
#Encapsulación del funcionamiento interno / seguridad
#Herencia
#Polimorfismo
#Ejemplo 01: Crear un clase que tenga:
#nombre Auto
#Propiedad color
#Método funPartir
#Crear un objeto de Auto
#Imprimir color del objeto
#Asignar color al objeto
#Volver a imprimir color del objeto
#Iniciar el auto
#Las clases (class) son como el plano/plantilla de un objeto de la vida real, que describe las características/propiedades/atributos y el comportamiento/métodos/funciones.
#Creamos la clase
class Auto(): #Por convención la primera letra es Mayúscula.
#Creamos una propiedad en blanco
color = ""
#Creamos el comportamiento
def funPartir(self): #self es una palabra reservada que va obligatoriamente
print("Inicia el auto")
#Creamos un objeto de la clase Auto (Instanciamos la clase)
objeto_auto = Auto()
#Imprimimos el color actual del auto
print("El color es: ", objeto_auto.color) #El color es:
#Asignamos color al auto
objeto_auto.color = "Rojo"
#Imprimimos nuevamente el color actual del auto
print("El color es: ", objeto_auto.color) #El color es: Rojo
#Partimos el auto
objeto_auto.funPartir() #Inicia el auto
#Ejemplo 02: Creamos una clase que tenga:
#Nombre Auto
#1 Propiedad
#1 Constructor que defina el valor inicial de la propiedad
#Crear objeto de la clase Auto
#Imprimir color auto
# Creamos la clase
class Auto():
# Creamos una propiedad en blanco
# Nota: Podría no ir esta propiedad, y de igual forma el constructor
# lo definiría
color = ""
# Creamos el constructor
# Esta es una función llamada siempre __init__ que se ejecuta
# automáticamente al crear un objeto de la clase
def __init__(self, color): #self palabra reservada que siempre va
# self.color hace referencia a la variable de la clase
# color es la variable pasada por el argumento de la función
self.color = color
# Creamos un objeto de la clase, y le pasamos un argumento al constructor
objeto_auto = Auto("Naranjo")
# Imprimimos el color actual del auto
print("El color es: ", objeto_auto.color) # El color es: Naranjo
#Ejemplo 03: Creamos una clase que tenga:
#Nombre Auto
#1 Propiedad definida desde el constructor
#1 Constructor que defina el valor inicial de la propiedad encapsulada "__"
#1 Método que defina el color
#1 Método que muestre el valor de color
#Crear objeto de la clase Auto
#Intentar modificar el valor de __color desde fuera de la clase
#Llamar al método para ver el valor del __color
# Creamos la clase
class Auto():
# Constructor
def __init__(self, color):
# Con los "__" antes de la propiedad, la encapsulamos (protegemos
# de ser modificada desde afuera de la clase)
self.__color = color
# Define el color
def set_color(self,color):
self.__color = color
#Muestra el color
def get_color(self):
print("El color es :", self.__color)
# Creamos un objeto de la clase, y le pasamos un argumento al constructor
objeto_auto = Auto("Naranjo")
# Intentamos modificar su valor (No se puede por estar encapsulado)
objeto_auto.__color = "Rojo" # Tampoco funciona objeto_auto.color = "Rojo"
# Imprimimos el color actual del auto
objeto_auto.get_color() # El color es :Naranjo
# Definimos el color en negro
objeto_auto.set_color("Negro")
# Imprimimos el color actual del auto
objeto_auto.get_color() # El color es :Negro
#Ejemplo 04: Creamos una clase que tenga:
#Nombre Auto
#1 Método no encapsulado que puede ser llamado desde a fuera de la clase
#1 Método encapsulado (no puede ser llamado desde a fuera de la clase)
#Llamar al método no encapsulado que llame a otro encapsulado
#Llamar al método encapsulado para forzar error
# Creamos la clase
class Auto():
#Método encapsulado
def __metArrancar(self):
print("El auto ha arrancado")
#Método sin encapsular
def metInicio(self):
self.__metArrancar()
# Creamos un objeto de la clase Auto.
objeto_auto = Auto()
# Llamar al método metInicio() que llama al método encapsulado
objeto_auto.metInicio() # El auto ha arrancado
# Intentamos llamar al método encapsulado
objeto_auto.__metArrancar() # Error no se encuentra el método __metArrancar
#Ejemplo 05: Dar un ejemplo de herencia. (Una clase que herede de otra), en donde se llame el constructor del padre para inicializar su única propiedad, y definir otra en la clase hija.
class Padre:
#constructor
def __init__(self,nombre_p):
self.nombre_p = nombre_p
def saludar1(self):
print(f"Hola, soy el {self.nombre_p}")
class Hijo(Padre): #Por medio de los () indicamos de que clase heredamos.
#constructor
def __init__(self,nombre_p, nombre_h):
#Llamamos al constructor del padre
super().__init__(nombre_p) #Super tambien sirve para llamar a métodos del padre.
self.nombre_h = nombre_h
def saludar2(self):
print(f"Hola, soy {self.nombre_h}")
#Instanciamos la clase Hijo
hijo = Hijo("Padre","Hijo")
hijo.saludar1() #Como la clase Hijo hereda de Padre, podemos usar su método.
hijo.saludar2() #Usamos el método de la clase hijo.
#Hola, soy el Padre
#Hola, soy Hijo
#Ejemplo 06: Sobreescribir un metodo print (__str__) de la clase object.
#Tips: Todas las clases heredan de object por defecto.
class Prueba(object): #Esto es opcional, podría ponerse simplemente class Prueba:
#Constructor
def __init__(self,nombre,apellido):
self.nombre = nombre
self.apellido = apellido
#Sobreescribimos el método __str__ del padre (object)
def __str__(self):
return "Nombre: " + self.nombre + "| Apellido: " + self.apellido
prueba = Prueba("Alberto","Delgado")
print(prueba)#Nombre: Alberto| Apellido: Delgado
#Ejemplo 07: Dar un ejemplo de polimorfismo.
#Polimorfismo: Podemos invocar un mismo método de diferentes objetos y obtener diferentes resultados según la clase de estos.
class Abuelo(object):
def saludo(sef):
print("Hola, soy el abuelo")
class Padre(Abuelo):
def saludo(sef):
print("Hola, soy el padre")
class Hijo(Padre):
def saludo(sef):
print("Hola, soy el Hijo")
a = Abuelo()
p = Padre()
h = Hijo()
def saludar(clase):
clase.saludo()
print(type(clase),end="\n\n") #Al final 2 saltos de línea.
saludar(a)
saludar(p)
saludar(h)
#Hola, soy el abuelo
#<class '__main__.Abuelo'>
#Hola, soy el padre
#<class '__main__.Padre'>
#Hola, soy el Hijo
#<class '__main__.Hijo'>
#Nota: Dependiendo de que instancia es pasada como argumento, es que utiliza el método del objeto. Con esto busca clases más genéricas.
#Ejemplo 08: Dada las 2 clases, mediante la función isinstance, imprimir según su origen sólo la que sea instancia de Hijo. (Pasar ambas objetos por la función origen)
class Padre(Abuelo):
def saludo(sef):
print("Hola, soy el padre")
class Hijo(Padre):
def saludo(sef):
print("Hola, soy el Hijo")
p = Padre()
h = Hijo()
def origen(objeto):
if isinstance(objeto,Hijo):
print("Esta es una instancia de Hijo")
print(type(objeto))
origen(p)
origen(h)
#
#Esta es una instancia de Hijo
#<class '__main__.Hijo'>
#Nota: El objeto h es un instancia tanto de la clase Padre como de la clase Hijo, por heredar de Padre.
#Ejemplo 09: Generar un programa con 3 clases, para ver la herencia multiple.
class Figura:
def saludo_figura(self):
print("Hola desde la figura")
class Color:
def saludo_color(self):
print("Hola desde color")
# Circulo hereda de ambas clases
class Circulo(Figura,Color):
def saludo_circulo(self):
print("Hola desde circulo")
# Instanciamos la clase Circulo
circulo = Circulo()
# Llamamos a las funciones de las 3 clases
circulo.saludo_figura()
circulo.saludo_color()
circulo.saludo_circulo()
#Hola desde la figura
#Hola desde color
#Hola desde circulo
#Nota1: Si desde circulo quisiera llamar a los constructores de las clases padres, se puede hacer con:
#Figura.init(self,) | super().init() llamaría también a Figura ya que es la primera del argumento.
#Circulo.init(self,)
#Nota2: Para ver un orden de ejecución de las clases se puede aplicar la función mro.
#print(Circulo.mro()) # [<class '__main__.Circulo'>, <class '__main__.Figura'>, <class '__main__.Color'>, <class 'object'>]
#Es un paradigma de programación declarativa basado en el uso de verdaderas funciones matemáticas. En este estilo de programación las funciones son ciudadanas de primera clase, porque sus expresiones pueden ser asignadas a variables como se haría con cualquier otro valor; además de que pueden crearse funciones de orden superior.
#Fuente: https://es.wikipedia.org/wiki/Programaci%C3%B3n_funcional
#Ejemplo 01: Usar las funciones como si se trataran de una variable. Para ello crear un función que devuelva una función suma o resta dependiendo de cual de ella se le entregue.
def fn_operacion(operacion):
def suma(a,b): #Función definida dentro de otra
return a+b
def resta(a,b):#Función definida dentro de otra
return a-b
if operacion == "suma":
return suma #Acá devuelve la función suma
elif operacion == "resta":
return resta
#Aca se guarda la función que devuelve fn_operacion
fun = fn_operacion("resta")
#Acá se imprime la salida de llamar a la función con los argumentos 3 y 4
print(fun(3,4)) #-1
#Ejemplo 02: Usar la función MAP para sumar las 2 listas dados.
#MAP: Devuelve un objeto de mapa (que es un iterador) de los resultados después de aplicar la función dada a cada elemento de un iterable dado (lista, tupla, etc.)
l1 = [1,2,3]
l2 = [4,5,6]
#NOta: l1 + l2 sería un error, ya que entrega [1,2,3,4,5,6]
# Definimos una función
def suma_lista(lista1,lista2):
return lista1 + lista2 #Acá va sumando cada elemento 1+4 = 5 | 2+5 = 7 ....
#Usamos la función map para aplicarle a las listas la función creada llamada suma_lista
salida = map(suma_lista,l1,l2) #Acá se pasan los 2 argumentos para la función
#Nota1: Si hago print(type(salida)) su resultado será "map"
#Nota2: Si hago print(salida) su resultado será "<map at 0x250d5741e48>"
#Imprimimos la salida convertida a lista
print(list(salida)) #[5,7,9]
#Opcionalmente se puede user funciones lambda - Esto reemplaza todo lo anterior
print(list(map(lambda a,b: a+b,l1,l2))) #[5,7,9]
#OPENPYXL: Este paquete nos ayudará a acceder a la lectura, escritura y manipulación de un libro de trabajo de excel.
#Ejemplo 01: Instalar el módulo
#Actualizar pip
python -m pip install --upgrade pip
#Instalar el paquete openpyxl
pip install openpyxl
#Ejemplo 02: Crear un libro de Excel en el path actual
#**********************************************
# Importamos el módulo y la clase Workbook
from openpyxl import Workbook
# Definimos el path donde guardaremos el primer libro (. es el directoria actual)
path = "./primero.xlsx"
# Creamos el objeto WorkBook
wb = Workbook()
# Usamos el método save para guardarlo en el path definido
wb.save(path)
#NumPy es una extensión de Python, que le agrega mayor soporte para vectores y matrices, constituyendo una biblioteca de funciones matemáticas de alto nivel para operar con esos vectores o matrices.
#Ejemplo 01: Instalar el módulo Numpy
#Actualizar pip desde cmd
python -m pip install --upgrade pip
#Instalar el paquete Numpy
pip install numpy
#Ejemplo 02: Crear un array de:
#1) Ceros - Dimensión 10 - Ver su tipo externo e interno
#2) Unos - Dimensión 10 - Ver su tipo externo e interno
#3) Random - Dimensión 3 - Ver su tipo externo e interno
import numpy as np
#1 - Ceros - Dimensión 10 - Ver su tipo externo e interno
a = np.zeros(10) #array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
type(a) # numpy.ndarray
a.dtype # dtype('float64')
#2 - Unos - Dimensión 10 - Ver su tipo externo e interno
b = np.ones(10) #array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
type(b) # numpy.ndarray
b.dtype # dtype('float64')
#3 - Unos - Dimensión 10 - Ver su tipo externo e interno
c = np.random.rand(3) #array([0.53087833, 0.19535405, 0.91249913])
type(c) # numpy.ndarray
c.dtype # dtype('float64')
#Ejemplo 03: Transformar una lista en un array de numpy, ver sus tipo, y tipos de Dados.
import numpy as np
lista = ['a','b','c','d','e']
array = np.array(lista) #array(['a', 'b', 'c', 'd', 'e'], dtype='<U1')
type(array) # numpy.ndarray
array.dtype # dtype('<U1')
#Ejemplo 04: Generar un array de numpy, al cual aplicar las operaciones básicas con la constante 10.
import numpy as np
array = np.array([10,20,30,40,50])
array + 10 #array([20, 30, 40, 50, 60])
array - 10 #array([ 0, 10, 20, 30, 40])
array x 10 #array([100, 200, 300, 400, 500])
array / 10 #array([1., 2., 3., 4., 5.])
array // 10 #array([1, 2, 3, 4, 5], dtype=int32)
array % 10 #array([0, 0, 0, 0, 0], dtype=int32)
array ** 10 #array([1410065408,797966336,716276736,1073741824,-1957116928],dtype=int32)
#Ejemplo 05: Generar un array de numpy, que contenga los números pares del 0 al 20, con alguna función de numpy. (Comprobar el tipo)
#Tips: Usar np.arange(inicio,fin,paso) | Idéntica a arange
import numpy as np
array = np.arange(0,20,2) #array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18])
type(array) #numpy.ndarray
#Ejemplo 06: Dado el array de numpy, invertirlo usando slice array[inicio:fin:paso].
import numpy as np
array = np.arange(0,10,1)
#array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
#índ + 0 1 2 3 4 5 6 7 8 9
#índ - -10 -9 -8 -7 -6 -5 -4 -3 -2 -1
invertido = array[::-1] #array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
#Nota: array sigue siendo array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
#Ejemplo 07: Generar una matriz en numpy (comprobar el tipo), ver sus dimensiones y finalmente ver la fila 2 (índice) y columna 1 (índice).
#Tips: Usar función shape
import numpy as np
matriz = np.array(([1,2,3],[4,5,6],[7,8,9]))
#array([[1, 2, 3],
# [4, 5, 6],
# [7, 8, 9]])
type(matriz) # numpy.ndarray
matriz.shape # (3, 3)
matriz[2] #array([7, 8, 9]) | Fila con índice 2
matriz[:,1] #array([2, 5, 8]) | Columna con índice 1
#Ejemplo 08: Generar una matriz en numpy con la función reshape y transponerla.
#Tips: Usar función T para transponer la matriz
import numpy as np
matriz = np.arange(15).reshape(3,5)
#array([[ 0, 1, 2, 3, 4],
# [ 5, 6, 7, 8, 9],
# [10, 11, 12, 13, 14]])
matriz.T
#array([[ 0, 5, 10],
# [ 1, 6, 11],
# [ 2, 7, 12],
# [ 3, 8, 13],
# [ 4, 9, 14]])
#Ejemplo 09: Dada la siguiente matriz, guardarla en el PC y cargarla nuevamente.
import numpy as np
matriz = np.arange(15).reshape(3,5)
#array([[ 0, 1, 2, 3, 4],
# [ 5, 6, 7, 8, 9],
# [10, 11, 12, 13, 14]])
matriz.save('matriz_de_np',matriz) #Guardamos la variables matriz en el pc con el nombre matriz_de_np que automáticamente le podrá la extensión .npy
matriz.load('matriz_de_np.npy') #Se carga con la extensión o dará error.
#Nota1: Para guardar más variables al mismo tiempo se usa:
#np.savez('archivo',x=variable1,y=variables2,z=....)
#np.load('archivo.npz')['x'] #nos traería la primera variable
#Nota2: Para guardar en un archivo de texto:
#np.savetxt('fichero.txt',variable,delimiter=",")
#np.loadtxt('fichero.txt',delimiter=",") #nos traería la variable.
#Ejemplo 10: Aplicar las siguiente funciones:
#Generar array aleotorio de 5 elementos => np.random.rand
#Generar 2 arrays (array1 y array2) de listas de 3 elementos => np.array
#Sumar ambos arrays y dejarlos en la variable array3 => np.add
#Raíz cuadrada del resultado de la suma=> np.sqrt
#Buscar los máximos entre el array1, array2 y array3 => np.maximum
import numpy as np
array = np.random.rand(5) #array([0.43977447, 0.07890765, 0.84672166, 0.15019089, 0.99397586])
array1 = np.array([1,2,3]) #array([1, 2, 3])
array2 = np.array([4,5,6]) #array([4, 5, 6])
array3 = np.add(array1,array2) # array([5, 7, 9])
np.sqrt(array3) #array([2.23606798, 2.64575131, 3.])
np.maximum(array1,array2,array3) #array([4, 5, 6])
#Pandas es una herramienta de análisis y manipulación de Dados de código abierto rápida, potente, flexible y fácil de usar, construida sobre el lenguaje de programación Python .
#La serie Pandas es una matriz etiquetada unidimensional capaz de contener Dados de cualquier tipo (entero, cadena, flotante, objetos de python, etc.). Las etiquetas de los ejes se denominan colectivamente índice . Pandas Series no es más que una columna en una hoja de Excel.
#El objeto admite la indexación basada en etiquetas y números enteros y proporciona una serie de métodos para realizar operaciones relacionadas con el índice.
#Ejemplo 01: Instalar el módulo pandas
#Actualizar pip desde cmd
python -m pip install --upgrade pip
#Instalar el paquete pandas desde cmd
pip install pandas
#Adicional: De no tener instalado el módulo numpy, instalarlo => pip install numpy
#Ejemplo 02: Crear una serie de 5 elementos y ver su tipo.
#Tips: Usar función pd.Series
import pandas as pd
serie = pd.Series([1,2,3,4,5])
#0 1
#1 2
#2 3
#3 4
#4 5
#dtype: int64
#Nota: La primera columna indica el índice y la segunda los elementos de la serie.
type(serie) # pandas.core.series.Series
#Ejemplo 03: Crear una serie con índice y elementos a partir de 2 listas, y luego imprimir el tercer elemento a través de su índice.
#Tips: Usar funcion pd.Series
import pandas as pd
indice = ['uno','dos','tres']
lista = [10,20,30]
serie = pd.Series(lista,index=indice)
#uno 10
#dos 20
#tres 30
#dtype: int64
print(serie['tres']) #30
#Ejemplo 04: Dada la siguiente serie, chequear la salida de la consultas lógicas "serie > 3" y luego listar los elementos que respondan al filtro.
import pandas as apd
serie = pd.Series([1,2,3,4,5,6])
print(serie > 3)
#0 False
#1 False
#2 False
#3 True
#4 True
#5 True
#dtype: bool
print(serie[serie>3])
#3 4
#4 5
#5 6
#dtype: int64
#Ejemplo 05: Dada la siguiente serie, chequear la salida de la consultas lógicas "serie > 3" y luego listar los elementos que respondan al filtro.
import pandas as pd
serie = pd.Series([1,2,3,4,5,6])
print(serie > 3)
#0 False
#1 False
#2 False
#3 True
#4 True
#5 True
#dtype: bool
print(serie[serie>3])
#3 4
#4 5
#5 6
#dtype: int64
#Ejemplo 06: Ponerle nombre a la serie y al índice
#Tips: Usar función .name = "" y .index = ""
import pandas as pd
serie = pd.Series([1,2,3])
serie.name = "Valores enteros"
serie.index.name = "Título índice"
#Título índice
#0 1
#1 2
#2 3
#Name: Valores enteros, dtype: int64
#Ejemplo 07: Dada la siguiente serie, convertirla en un diccionario
#Tips: Usar función .to_dict()
import pandas as pd
serie = pd.Series([10,20,30],index=[1,2,3])
#1 10
#2 20
#3 30
#dtype: int64
dic = serie.to_dict() #{1: 10, 2: 20, 3: 30}
type(dic) #dict
#Nota: De diccionario a serie sería serie = pd.Series(dic)
#Ejemplo 08: Dada la serie1 y serie2 ver salidas de las siguientes operaciones:
#serie1+serie2
#serie2/serie1
import pandas as pd
serie1 = pd.Series([10,20,30],index=[1,2,3])
serie2 = pd.Series([20,40,60],index=[1,2,3])
serie1+serie2
#1 30
#2 60
#3 90
#dtype: int64
serie2/serie1
#1 2.0
#2 2.0
#3 2.0
#dtype: float64
#El Pandas DataFrame es una estructura que contiene Dados bidimensionales y sus etiquetas correspondientes . Estos se utilizan ampliamente en la ciencia de Dados , el aprendizaje automático , la informática científica y muchos otros campos de uso intensivo de Dados.
#Los DataFrames son similares a las tablas SQL o las hojas de cálculo con las que trabaja en Excel. En muchos casos, los DataFrames son más rápidos, más fáciles de usar y más potentes que las tablas o las hojas de cálculo porque son una parte integral de los ecosistemas de Python y NumPy .
#Ejemplo 01: Instalar el módulo pandas
#Actualizar pip desde cmd
python -m pip install --upgrade pip
#Instalar el paquete pandas desde cmd
pip install pandas
#Nota: Este módulo está muy relacionado con otro llamado numpy, por lo que es necesario si no se tienen instalado, que se haga: pip install numpy
#Ejemplo 01: Crear un objeto DataFrame vació, ver su tipo e imprimirlo.
import pandas as pd
df = pd.DataFrame()
type(df) #pandas.core.frame.DataFrame
print(df)
#Empty DataFrame
#Columns: []
#Index: []
#Ejemplo 02: Crear un DataFrame a partir de un DICCIONARIO, analizando su tipo, antes y después de la conversión. Finalmente imprimir el DataFrame resultante.
import pandas as pd
import numpy as np
coleccion = {
"PAIS" : ["Chile","Brasil","Perú","Chile","Chile"],
"CIUDAD" : ["Santiago","Antas","Lima","Santiago","Concepción"],
"CODIGO" : [1,2,np.nan,1,3],
"VENTAS" : [100,200,300,400,500]
}
#Nota: Los NaN = np.nan (De la librería numpy - “Not a Number“) son valores vacíos no computables que debemos tratar en nuestros conjuntos de Dados antes de trabajar con ellos.
print(type(coleccion)) #dict
df = pd.DataFrame(coleccion)
print(type(df)) #pandas.core.frame.DataFrame
print(df)
# PAIS CIUDAD CODIGO VENTAS
#0 Chile Santiago 1 100
#1 Brasil Antas 2 200
#2 Perú Lima NaN 300
#3 Chile Santiago 1 400
#4 Chile Concepción 3 500
#Ejemplo 03: Crear un DataFrame a partir de una LISTA, analizando su tipo, antes y después de la conversión, en donde el índice parta en 1. Finalmente imprimir el DataFrame resultante.
import pandas as pd
import numpy as np
coleccion = [
["Chile","Santiago",1,100],
["Brasil","Antas",2,200],
["Perú","Lima",np.nan,300],
["Chile","Santiago",1,400],
["Chile","Concepción",3,500]
]
#Nota: Los NaN = np.nan (De la librería numpy - “Not a Number“) son valores vacíos no computables que debemos tratar en nuestros conjuntos de Dados antes de trabajar con ellos.
print(type(coleccion)) #list
df = pd.DataFrame(coleccion,columns=["PAIS","CIUDAD","CODIGO","VENTAS"],index = np.arange(1,6))
print(type(df)) #pandas.core.frame.DataFrame
print(df)
# PAIS CIUDAD CODIGO VENTAS
#1 Chile Santiago 1.0 100
#2 Brasil Antas 2.0 200
#3 Perú Lima NaN 300
#4 Chile Santiago 1.0 400
#5 Chile Concepción 3.0 500
#Ejemplo 01: Cargar 2 dataframe desde un csv. Uno es un csv con codificación UTF-8 y el otro con codificación ANSI (Ver archivos csv en Visual Studio Code antes de cargarlos) y luego imprimir alguno.
#Nota:
#UTF-8: Guardado en el excel como "CSV UTF-8 (delimitado por comas) (*.csv)"
#ANSI: Guardado en el excel como "CSV (delimitado por comas) (*.csv)"
import pandas as pd
#csv_utf8.csv
#------------
#PAIS,CIUDAD,CODIGO,VENTAS
#Chile,Santiago,1,100
#Brasil,Antas,2,200
#Perú,Lima,,300
#Chile,Santiago,1,400
#Chile,Concepción,3,500
#csv_ansi.csv
#------------
#PAIS,CIUDAD,CODIGO,VENTAS
#Chile,Santiago,1,100
#Brasil,Antas,2,200
#Per�,Lima,,300
#Chile,Santiago,1,400
#Chile,Concepci�n,3,500
df_utf8 = pd.read_csv('csv_utf8.csv')
df_ansi = pd.read_csv('csv_ansi.csv', encoding='latin1') #De no pasar el encodig dará error
#Otras opciones al momento de cargar el csv
#------------------------------------------
#sep : especifique un delimitador personalizado para la entrada CSV; el valor predeterminado es una coma. Ej:pd.read_csv ('Archivo.csv', sep = '\t') # Use Tab para separar
#header=0 es el valor predeterminado, lo que significa que la primera fila del archivo CSV se tratará como nombres de columna.Si su archivo no tiene un encabezado, simplemente configure header=None.
print(df_ansi)
# PAIS CIUDAD CODIGO VENTAS
#0 Chile Santiago 1.0 100
#1 Brasil Antas 2.0 200
#2 Perú Lima NaN 300
#3 Chile Santiago 1.0 400
#4 Chile Concepción 3.0 500
#Ejemplo 02: Dato el siguiente Data Frame, guardarlo en un archivo csv con los índices, con los nombres de las columnas y como separador la virgulilla "~".
import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(16).reshape(4,4),columns = ['c1','c2','c3','c4'])
# c1 c2 c3 c4
#0 0 1 2 3
#1 4 5 6 7
#2 8 9 10 11
#3 12 13 14 15
#Guardamos el archivo en la raiz
df.to_csv('r16.csv', index = False, header = True, sep='~')
#Al ver r16.csv por el explorador de archivos:
#c1~c2~c3~c4
#0~1~2~3
#4~5~6~7
#8~9~10~11
#12~13~14~15
#Ejemplo 01: Antes de usar la función para leer excel, primero instalar: pip install xlrd
# Ahora leer un archivo en una variable llamada df con el path dado e imprimirlo por pantalla.
# Importamos la librería pandas
import pandas as pd
#r significa que la cadena se tratará como una cadena sin formato.
PATH = r'C:\Users\Alberto\Desktop\practica\ejemplo1.xlsx'
df = pd.read_excel(PATH)
print(df)
# nombres peso
#0 cristian 90
#1 cony 50
#2 juan 70
#3 alberto 80
#Ejemplo 02: Dado el siguiente excel, leerlo y transformar los ... y (sin dato) en NaN e imprimir el resultado.
# ejemplo2.xlsx
# nombres peso
#0 cristian 90
#1 ... 50
#2 juan 70
#3 (sin dato) 80
# Importamos la librería pandas
import pandas as pd
#r significa que la cadena se tratará como una cadena sin formato.
PATH = r'C:\Users\Alberto\Desktop\practica\ejemplo2.xlsx'
df = pd.read_excel(PATH, na_values=['…','(sin dato)'])
print(df)
# nombres peso
#0 cristian 90
#1 NaN 50
#2 juan 70
#3 NaN 80
#Ejemplo 03: Dado el siguiente excel, leerlo y transformar el peso en kilos a gramos e imprimir el resultado.
# ejemplo1.xlsx
# nombres peso
#0 cristian 90
#1 cony 50
#2 juan 70
#3 alberto 80
# Importamos la librería pandas
import pandas as pd
#r significa que la cadena se tratará como una cadena sin formato.
PATH = r'C:\Users\Alberto\Desktop\practica\ejemplo1.xlsx'
df = pd.read_excel(PATH, converters={'peso':lambda x:x*1000})
print(df)
# nombres peso
#0 cristian 90000
#1 cony 50000
#2 juan 70000
#3 alberto 80000
#Ejemplo 04: Dada una planilla excel con 3 hojas (Hoja1,Hoja2,Hoja3), abrir sólo la Hoja3 e imprimirla.
# Importamos la librería pandas
import pandas as pd
#r significa que la cadena se tratará como una cadena sin formato.
PATH = r'C:\Users\Alberto\Desktop\practica\ejemplo3.xlsx'
df = pd.read_excel(PATH, sheet_name='Hoja3')
print(df)
# nombres
#0 Hoja3
#Ejemplo 05: Guardar el df en un archivo excel llamado salidax.xlsx, con nombre de hoja 'BASE' Y sin la columna índice. (Para guardar en excel primero "pip install xlwt")
# Importamos la librería pandas
import pandas as pd
#r significa que la cadena se tratará como una cadena sin formato.
PATH = r'C:\Users\Alberto\Desktop\practica\salidax.xls'
df = pd.DataFrame({'nombres':['Juan','Cristian','Cony','Alberto']})
df.to_excel(PATH, sheet_name='BASE', index=False)
#Ejemplo 01: Identificar lo siguiente del Dataframe csv_utf8.csv (Ejemplo anterior):
#1) Nombre de las columnas y nombre de los índices
#2) Nombre de las columnas usando función .info()
#3) Ver 2 primeras y últimas líneas
#4) Ver los tipos de Dados
#5) Ver los estadísticos de los campos numéricos, aplicar sum() para filas y columnas
#6) Ver la forma del dataframe (Filas x columnas) y obtener valores por separado
import pandas as pd
#Cargamos el dataframe
df = pd.read_csv('csv_utf8.csv')
#1 - Nombre de las columnas y nombre de los índices
df.columns #Index(['PAIS', 'CIUDAD', 'CODIGO', 'VENTAS'], dtype='object')
df.index #Index(['fisica', 'quimica', 'matematicas'], dtype='object')
#2 - Nombre de las columnas usando función .info()
df.info()
#<class 'pandas.core.frame.DataFrame'>
#RangeIndex: 5 entries, 0 to 4
#Data columns (total 4 columns):
# # Column Non-Null Count Dtype
#--- ------ -------------- -----
# 0 PAIS 5 non-null object
# 1 CIUDAD 5 non-null object
# 2 CODIGO 4 non-null float64
# 3 VENTAS 5 non-null int64
#dtypes: float64(1), int64(1), object(2)
#memory usage: 288.0+ bytes
#3 - Ver 2 primeras y últimas líneas
df.head(2) #Si no se entrega argumento, entregará las 5 primeras líneas
# PAIS CIUDAD CODIGO VENTAS
#0 Chile Santiago 1.0 100
#1 Brasil Antas 2.0 200
df.tail(2) #Si no se entrega argumento, entregará las 5 últimas líneas
#PAIS CIUDAD CODIGO VENTAS
#3 Chile Santiago 1.0 400
#4 Chile Concepción 3.0 500
#4 - Ver los tipos de Dados
df.dtypes
#PAIS object
#CIUDAD object
#CODIGO float64
#VENTAS int64
#dtype: object
#5 - Ver los estadísticos de los campos numéricos, aplicar sum() para filas y columnas
df.describe()
# CODIGO VENTAS
#count 4.000000 5.000000
#mean 1.750000 300.000000
#std 0.957427 158.113883
#min 1.000000 100.000000
#25% 1.000000 200.000000
#50% 1.500000 300.000000
#75% 2.250000 400.000000
#max 3.000000 500.000000
#Suma por columnas
df.sum()
#PAIS ChileBrasilPerúChileChile
#CUIDAD SantiagoAntasLimaSantiagoConcepción
#CODIGO 7
#VENTAS 1500
#dtype: object
df.sum(axis=1)
#Suma por filas |Nota: Sólo considera valores.
#0 101.0
#1 202.0
#2 300.0
#3 401.0
#4 503.0
#dtype: float64
#Nota:
#min() y min(axis=1) entregan el mínimo valor por columna y por fila.
#max() y max(axis=1) entregan el máximo valor por columna y por fila.
#idxmax() encuentra el índice de menor valor por columna
#6 - Ver la forma del dataframe (Filas x columnas) y obtener valores por separado
df.shape #(5, 4)
df.shape[0] #5
df.shape[1] #4
#Ejemplo 01: Dado el dataframe:
#1) Mostrar sólo la columna PAIS del dataframe y mostrar su tipo.
#2) Mostrar sólo las columnas CODIGO y VENTAS del dataframe y mostrar su tipo.
#3) Mostrar sólo las filas donde las ventas >= 300.
#4) Mostrar sólo las filas donde las ventas >= 300 y <= 400
import pandas as pd
df = pd.read_csv('csv_utf8.csv')
# PAIS CIUDAD CODIGO VENTAS
#0 Chile Santiago 1.0 100
#1 Brasil Antas 2.0 200
#2 Perú Lima NaN 300
#3 Chile Santiago 1.0 400
#4 Chile Concepción 3.0 500
#1 - Mostrar sólo la columna PAIS del dataframe y mostrar su tipo.
pais = df.PAIS #Opcional: df['PAIS']
print(type(pais)) #pandas.core.series.Series (Se transforma en una serie, cuando es una columna)
print(pais)
#0 Chile
#1 Brasil
#2 Perú
#3 Chile
#4 Chile
#Name: PAIS, dtype: object
#2 - Mostrar sólo las columnas CODIGO y VENTAS del dataframe y mostrar su tipo.
cod_ven = df[['CODIGO','VENTAS']]
print(type(cod_ven)) #<class 'pandas.core.frame.DataFrame'>
print(cod_ven)
# PAIS CUIDAD
#0 Chile Santiago
#1 Brasil Antas
#2 Perú Lima
#3 Chile Santiago
#4 Chile Concepción
#3 - Mostrar sólo las filas donde las ventas >= 300.
#Primero generarmos la salida booleada para ver quién cumple condición:
print(df['VENTAS']>=300)
#0 False
#1 False
#2 True
#3 True
#4 True
#Name: VENTAS, dtype: bool
#Luego este vector booleadno lo cargamos dentro del dataframe para ver las filas completas, que cumplen la condición:
print(df[df['VENTAS']>=300])
# PAIS CUIDAD CODIGO VENTAS
#2 Perú Lima NaN 300
#3 Chile Santiago 1.0 400
#4 Chile Concepción 3.0 500
#4 - Mostrar sólo las filas donde las ventas >= 300 y <= 400
#Tips: a) & es "y" (Con and no funciona) - Nota: Para el "o" se una "|" (Or no funciona)
# b) Son obligatorios los paréntesis
print(df[(df['VENTAS']>=300) & (df['VENTAS']<=400)])
# PAIS CUIDAD CODIGO VENTAS
#2 Perú Lima NaN 300
#3 Chile Santiago 1.0 400
#Ejemplo 02: Dado el df, mostrar las columnas que son iguales al Chile y a Brasil.
#Tips: Usar lógica booleana y luego funcion isin de pandas
import pandas as pd
df = pd.read_csv('csv_utf8.csv')
# PAIS CIUDAD CODIGO VENTAS
#0 Chile Santiago 1.0 100
#1 Brasil Antas 2.0 200
#2 Perú Lima NaN 300
#3 Chile Santiago 1.0 400
#4 Chile Concepción 3.0 500
#Lógica booleana
print(df[(df.PAIS =='Chile') | (df.PAIS =='Brasil')])
# PAIS CUIDAD CODIGO VENTAS
#0 Chile Santiago 1.0 100
#1 Brasil Antas 2.0 200
#3 Chile Santiago 1.0 400
#4 Chile Concepción 3.0 500
#Función isin
print(df[df.PAIS.isin(['Chile','Brasil'])]) #Si quiero la negación [~df.PAIS.isin...]
# PAIS CUIDAD CODIGO VENTAS
#0 Chile Santiago 1.0 100
#1 Brasil Antas 2.0 200
#3 Chile Santiago 1.0 400
#4 Chile Concepción 3.0 500
#Ejemplo 01: Dado el dataframe, seleccionar sectores del dataframe con las funciones iloc.
#1) Imprimir el único dato NaN.
#2) Imprimir la tercera fila completa.
#3) Imprimir la cuarta columna completa.
#4) Imprimir de las columnas CODIGO Y VENTAS solo las filas con índice 3 y 4.
#5) Imprimir de las filas con índices pares usando iloc.
import pandas as pd
#Tips: iloc se utiliza en los DataFrames para seleccionar los elementos en base a su ubicación. Su sintaxis es df.iloc[<filas>, <columnas>].
df = pd.read_csv('csv_utf8.csv')
# PAIS CIUDAD CODIGO VENTAS
#0 Chile Santiago 1.0 100
#1 Brasil Antas 2.0 200
#2 Perú Lima NaN 300
#3 Chile Santiago 1.0 400
#4 Chile Concepción 3.0 500
#1 - Imprimir el único dato NaN usando iloc
print(df.iloc[2,2]) #nan
#2 - Imprimir la tercera fila completa con iloc
print(df.iloc[2,:]) #nan |Opcional: df.iloc[2]
#PAIS Perú
#CIUDAD Lima
#CODIGO NaN
#VENTAS 300
#Name: 2, dtype: object
#3 - Imprimir la cuarta columna completa con iloc
print(df.iloc[:,3])
#0 100
#1 200
#2 300
#3 400
#4 500
#Name: VENTAS, dtype: int64
#4 - Imprimir de las columnas CODIGO y VENTAS, solo de las filas con índice 3 y 4 usando iloc
print(df.iloc[3:5,2:4]) #Ojo con slice [inicio:fin-1]
#CODIGO VENTAS
#3 1.0 400
#4 3.0 500
#5 - Imprimir de las filas con índices pares usando iloc.
print(df.iloc[0::2]) #Ojo con slice [inicio:fin-1:paso]
#PAIS CUIDAD CODIGO VENTAS
#0 Chile Santiago 1.0 100
#2 Perú Lima NaN 300
#4 Chile Concepción 3.0 500
#Ejemplo 02: Dado el dataframe, seleccionar sectores del dataframe con las funciones iloc.
#1) Imprimir el único Dado NaN
#2) Imprimir la tercera fila completa
#3) Imprimir la cuarta columna completa
#4) Imprimir de las columnas CODIGO Y VENTAS solo las filas con índice 3 y 4
#Tips: iloc se utiliza en los DataFrames para seleccionar los elementos en base a su ubicación. Su sintaxis es df.iloc[<filas>, <columnas>].
import pandas as pd
df = pd.read_csv('csv_utf8.csv')
# PAIS CIUDAD CODIGO VENTAS
#0 Chile Santiago 1.0 100
#1 Brasil Antas 2.0 200
#2 Perú Lima NaN 300
#3 Chile Santiago 1.0 400
#4 Chile Concepción 3.0 500
#1 - Imprimir el único Dado NaN usando iloc
print(df.iloc[2,2]) #nan
#2 - Imprimir la tercera fila completa con iloc
print(df.iloc[2,:]) #nan |Opcional: df.iloc[2]
#PAIS Perú
#CIUDAD Lima
#CODIGO NaN
#VENTAS 300
#Name: 2, dtype: object
#3 - Imprimir la cuarta columna completa con iloc
print(df.iloc[:,3])
#0 100
#1 200
#2 300
#3 400
#4 500
#Name: VENTAS, dtype: int64
#4 - Imprimir de las columnas CODIGO y VENTAS solo las filas con índice 3 y 4 usando iloc
print(df.iloc[3:5,2:4])
#CODIGO VENTAS
#3 1.0 400
#4 3.0 500
#Nota: Es importante tener en cuenta que iloc devuelve una Serie Pandas cuando se selecciona una fila y un DataFrame cuando se selecciona varias.
#Ejemplo 01: Dado el dataframe, seleccionar sectores del dataframe con las funciones loc.
#1) Imprimir la nota de quimica de cristian
#2) Imprimir la todas las notas de matematicas
#3) Imprimir la fila de fisica y quimica pero sólo de cristian y cony
#4) Imprimir la fila de fisica y quimica usando booleandos y cambiar todas esas notas a 10
#Tips: La función loc () se usa para acceder a un grupo de filas y columnas por etiqueta (s) o una matriz booleana. <df.loc[<indice>, <columnas>]>
import pandas as pd
df = pd.DataFrame([[4,6,3],[6,7,5],[7,7,4]],index=['fisica','quimica','matematicas'],columns=['juan','cristian','cony'])
# juan cristian cony
#fisica 4 6 3
#quimica 6 7 5
#matematicas 7 7 4
#1 - Imprimir la nota de quimica de cristian
print(df.loc['quimica','cristian']) #7
#2 - Imprimir la todas las notas de matematicas
print(df.loc['matematicas']) #Opciona: df.loc['matematicas',] | df.loc['matematicas',:]
#juan 7
#cristian 7
#cony 4
#Name: matematicas, dtype: int64
#3 - Imprimir la fila de fisica y quimica pero sólo de cristian y cony
print(df.loc['fisica':'quimica','cristian':'cony'])
# cristian cony
#fisica 6 3
#quimica 7 5
#4 - Filtrar las filas de "fisica" y "quimica" usando booleandos y cambiar todas esas notas a 10, y luego imprimir el data frame completo.
print(df.loc[[True,True,False]] = 10)
# juan cristian cony
#fisica 10 10 10
#quimica 10 10 10
#matematicas 7 7 4
#Ejemplo 01: Dado el siguiente DataFrame:
#1) Identificar las celdas na
#2) Contar los na por columna
#3) Eliminar fila que tenga na
#4) Reemplazar na por 0
import pandas as pd
df = pd.read_csv('csv_utf8.csv')
# PAIS CIUDAD CODIGO VENTAS
#0 Chile Santiago 1.0 100
#1 Brasil Antas 2.0 200
#2 Perú Lima NaN 300
#3 Chile Santiago 1.0 400
#4 Chile Concepción 3.0 500
#1 - Identificar las celdas na
df.isna()
# PAIS CIUDAD CODIGO VENTAS
#0 False False False False
#1 False False False False
#2 False False True False
#3 False False False False
#4 False False False False
#2 - Contar los na por columna
df.isna().sum()
#PAIS 0
#CIUDAD 0
#CODIGO 1
#VENTAS 0
#dtype: int64
#3 - Eliminar fila que tenga na
df.dropna()
# PAIS CUIDAD CODIGO VENTAS
#0 Chile Santiago 1.0 100
#1 Brasil Antas 2.0 200
#3 Chile Santiago 1.0 400
#4 Chile Concepción 3.0 500
#4 - Reemplazar na por 0
df.fillna(0)
# PAIS CIUDAD CODIGO VENTAS
#0 Chile Santiago 1.0 100
#1 Brasil Antas 2.0 200
#2 Perú Lima 0.0 300
#3 Chile Santiago 1.0 400
#4 Chile Concepción 3.0 500
#Ejemplo 11: Dado el siguiente DataFrame:
#1) Borrar la fila del índice 1 y luego imprima el df
#2) Borrar la columna c2 y luego imprima el df
#3) Hacer un filtro del índice 2 y 3, y a este sub DataFrame, resetear los índices.
import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(16).reshape(4,4),columns=['c1','c2','c3','c4'])
# c1 c2 c3 c4
#0 0 1 2 3
#1 4 5 6 7
#2 8 9 10 11
#3 12 13 14 15
#1 - Borrar la fila del índice 1 y luego imprima el df
print(df.drop(1))
# c1 c2 c3 c4
#0 0 1 2 3
#2 8 9 10 11
#3 12 13 14 15
print(df) #No se modifca el df original
# c1 c2 c3 c4
#0 0 1 2 3
#1 4 5 6 7
#2 8 9 10 11
#3 12 13 14 15
#2 - Borrar la columna c2 y luego imprima el df
print(df.drop('c2',axis=1)) #Nota: con axis = 1 indicamos que a nivel de columnas el borrado
# c1 c3 c4
#0 0 2 3
#1 4 6 7
#2 8 10 11
#3 12 14 15
print(df) #No se modifica el df original
# c1 c2 c3 c4
#0 0 1 2 3
#1 4 5 6 7
#2 8 9 10 11
#3 12 13 14 15
#3 - Hacer un filtro del índice 2 y 3, y a este sub DataFrame, resetear los índices.
print(df_filtro = df.loc[2:3])
# c1 c2 c3 c4
#2 8 9 10 11
#3 12 13 14 15
#Ahora reseteamos el índice para que inicien en 0, y lo imprimimos para verlo
df_filtro = df_filtro.reset_index() #De no reasignarlo a la variable, el df no se modifica.
print(df_filtro)
# index c1 c2 c3 c4
#0 2 8 9 10 11
#1 3 12 13 14 15
#Ahora si no necesitamos la columna index que se generó
df_filtro = df_filtro.reset_index(drop=True)
print(df_filtro)
# c1 c2 c3 c4
#0 8 9 10 11
#1 12 13 14 15
#Ejemplo 01: Dado el DataFrame, agregar la columna Total al final.
import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(16).reshape(4,4),columns=['c1','c2','c3','c4'])
# c1 c2 c3 c4
#0 0 1 2 3
#1 4 5 6 7
#2 8 9 10 11
#3 12 13 14 15
df['Total'] = [6,22,28,54]
print(df)
# c1 c2 c3 c4 Total
#0 0 1 2 3 6
#1 4 5 6 7 22
#2 8 9 10 11 28
#3 12 13 14 15 54
#Ejemplo 02: Dado el DataFrame, agregar la columna Total, entre columnas 'c2' y 'c3'.
import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(16).reshape(4,4),columns=['c1','c2','c3','c4'])
# c1 c2 c3 c4
#0 0 1 2 3
#1 4 5 6 7
#2 8 9 10 11
#3 12 13 14 15
# Insertamos en la columna 2, la columna Total
df.insert(2,'Total',[6,22,28,54])
print(df)
# c1 c2 Total c3 c4
#0 0 1 6 2 3
#1 4 5 22 6 7
#2 8 9 28 10 11
#3 12 13 54 14 15
#Ejemplo 03: Dado el DataFrame, agregar la columna 'C4_X_4' al final, que utiliza una columna ya existe en el cáculo: df.c4 * 4.
import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(16).reshape(4,4),columns=['c1','c2','c3','c4'])
# c1 c2 c3 c4
#0 0 1 2 3
#1 4 5 6 7
#2 8 9 10 11
#3 12 13 14 15
# Insertamos en la columna 2, la columna Total
df['c4_X_4'] = df.c4 * 4
print(df)
# c1 c2 c3 c4 c4_x_4
#0 0 1 2 3 12
#1 4 5 6 7 28
#2 8 9 10 11 44
#3 12 13 14 15 60
#Ejemplo 04: Dado el DataFrame, agregar la columna 'Materia' al inicio ['Cálculo','Física','Química','BBDD I'], luego dejar todas en mayúsculas y finalmente renombrar las columnas ['c1','c2','c3','c4'] a ['Nota_1','Nota_2','Nota_3','Nota_4'].
import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(16).reshape(4,4),columns=['c1','c2','c3','c4'])
# c1 c2 c3 c4
#0 0 1 2 3
#1 4 5 6 7
#2 8 9 10 11
#3 12 13 14 15
# Insertamos la columna 'Materia' en el índice 0
df.insert(0,'Materia',['Cálculo','Física','Química','BBDD I'])
# Transformamos los datos a string y luego con el metodo upper la dejamos en mayúscula.
df.Materia = df.Materia.str.upper()
# Renombramos las columnas
df.columns = ['Materia','Nota_1','Nota_2','Nota_3','Nota_4']
# Opcionalmente para renombrar una o varias variables, se usa el rename.
#df.rename(columns = {
# 'c1':'Nota_1',
# 'c2':'Nota_2',
# 'c3':'Nota_3',
# 'c4':'Nota_4'
#}, inplace = True) #inplace = True es para modificar el df.
print(df)
# Materia Nota_1 Nota_2 Nota_3 Nota_4
#0 CÁLCULO 0 1 2 3
#1 FÍSICA 4 5 6 7
#2 QUÍMICA 8 9 10 11
#3 BBDD I 12 13 14 15
#Ejemplo 05: Dado el DataFrame, borrar la fila con índice 3 y la columna 'c4'
import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(16).reshape(4,4),columns=['c1','c2','c3','c4'])
# c1 c2 c3 c4
#0 0 1 2 3
#1 4 5 6 7
#2 8 9 10 11
#3 12 13 14 15
#Primero eliminamos la fila de índice 3 y con inplace= True guardamos cambios en df
df.drop(3,inplace = True)
#Luego eliminamos la columna. Con axis = 1 le indicamos que es columna y con inplace= True guardamos cambios en df | Nota: Si fueran más de una columas, se pasa una lista ['c4','c5'..
df.drop('c4',axis = 1,inplace=True)
print(df)
# c1 c2 c3
#0 0 1 2
#1 4 5 6
#2 8 9 10
#Pandas.apply permite pasar una función y aplicarla en cada valor de la serie Pandas. Se trata de una gran mejora para la biblioteca de pandas, ya que esta función ayuda a segregar datos de acuerdo con las condiciones requeridas, por lo que se usa de manera eficiente en ciencia de datos y aprendizaje automático.
#Ejemplo 01: Dado el DataFrame:
#1) Suma de las columnas
#2) Suma de cada fila
import pandas as pd
import numpy as np
df = pd.DataFrame([[4,9,16]] * 3, columns = ['A','B','C'])
# A B C
#0 4 9 16
#1 4 9 16
#2 4 9 16
#1 - Suma de cada columnas
print(df.apply(np.sum)) #Opcional: df.apply(np.sum, axis = 0)
#A 12
#B 27
#C 48
#dtype: int64
#2 - Suma de cada fila
print(df.apply(np.sum, axis = 1))
#0 29
#1 29
#2 29
#dtype: int64
#Ejemplo 01: Dado el DataFrame, mediante una función lambda crear una nueva columna con el proveedor de correo.
import pandas as pd
df = pd.DataFrame([
['Juan','juan@gmail.com'],
['Cristian','Cristian@outlook.com'],
['Cony','Cony@yahoo.com'],
], columns = ['Usuario','Correo'])
# Usuario Correo
#0 Juan juan@gmail.com
#1 Cristian Cristian@outlook.com
#2 Cony Cony@yahoo.com
# APlicamos el lambda siempre con el .apply
df['Proveedor'] = df.Correo.apply(
lambda x: x.split('@')[-1]
)
print(df)
# Usuario Correo Proveedor
#0 Juan juan@gmail.com gmail.com
#1 Cristian Cristian@outlook.com outlook.com
#2 Cony Cony@yahoo.com yahoo.com
#Ejemplo 02: Dado el DataFrame, mediante una función lambda crear una nueva columna con el nombre 'Impuesto', que calcule el impuesto (0.19), sólo de los Estados "SI".
import pandas as pd
df = pd.DataFrame([
['Juan','juan@gmail.com',10,'SI'],
['Cristian','Cristian@outlook.com',20,'NO'],
['Cony','Cony@yahoo.com',30,'SI'],
], columns = ['Usuario','Correo','Precio','Estado'])
# Usuario Correo Precio Estado
#0 Juan juan@gmail.com 10 SI
#1 Cristian Cristian@outlook.com 20 NO
#2 Cony Cony@yahoo.com 30 SI
# APlicamos el lambda siempre con el .apply pero ahora no a una columna específica.
# Además se aplica axis = 1 para que actué por fila.
df['Impuesto'] = df.apply(
lambda x: x.Precio * 0.19 if x.Estado == 'SI' else x.Precio,
axis = 1
)
print(df)
# Usuario Correo Precio Estado Impuesto
#0 Juan juan@gmail.com 10 SI 1.9
#1 Cristian Cristian@outlook.com 20 NO 20.0
#2 Cony Cony@yahoo.com 30 SI 5.7
#Los agregados son una forma de crear un único número de que describirá un grupo de númeors. Entre los más comunes: mean, median, std, unique, nunique, max, min, count, sum
#Ejemplo 01: Dado el siguiente DataFrame, calcular:
#1) La mediana del campo precio
#2) Cantidad de precios únicos
#3) Desviación estandar de los precios
#4) El promedio de los precios
import pandas as pd
df = pd.DataFrame([
['Juan','juan@gmail.com',10,'SI'],
['Cristian','Cristian@outlook.com',20,'NO'],
['Cony','Cony@yahoo.com',10,'SI'],
], columns = ['Usuario','Correo','Precio','Estado'])
# Usuario Correo Precio Estado
#0 Juan juan@gmail.com 10 SI
#1 Cristian Cristian@outlook.com 20 NO
#2 Cony Cony@yahoo.com 10 SI
#1 - La mediana del campo precio
print(df.Precio.median()) #10.0
#2 - Cantidad de precios únicos
#Con esta línea los vemos
print(df.Precio.unique()) #[10 20]
#Con esta línea los contamos
print(df.Precio.nunique()) #2
#3 - Desviación estandar de los precios
print(df.Precio.std()) # 5.773502691896257
#4 - El promedio de los precios
print(df.Precio.mean()) # 13.333333333333334
#Ejemplo 02: Dado el siguiente DataFrame, aplicar group by para:
#1) Total de ventas por País - Asignarlo a la variable Total
#2) Ver el tipo de dato de la variable creada Total
#3) Generar la misma variable Total, pero que se genere como DataFrame
import pandas as pd
df = pd.DataFrame({
"PAIS" : ["Chile","Argentina","Perú","Chile","Chile"],
"CUIDAD" : ["Santiago","Córdoba","Lima","Santiago","Concepción"],
"VENTAS" : [100,100,100,100,100]
})
# PAIS CUIDAD VENTAS
#0 Chile Santiago 100
#1 Argentina Córdoba 100
#2 Perú Lima 100
#3 Chile Santiago 100
#4 Chile Concepción 100
#1 - Total de ventas por País - Asignarlo a la variable Total
#df.groupby('column1').column2.funcion()
Total = df.groupby('PAIS').VENTAS.sum()
print(Total)
#PAIS
#Argentina 100
#Chile 300
#Perú 100
#Name: VENTAS, dtype: int64
#Nota: Si quisieramos más de un columnas:
##df.groupby(['column1','column2'...]).column2.funcion()
#2 - Ver el tipo de dato de la variable creada Total
print(type(Total)) # pandas.core.series.Series
#3 - Generar la misma variable Total, pero que se genere como DataFrame
#Reset_index permite aparte de limpiar el índice la transformación
Total = df.groupby('PAIS').VENTAS.sum().reset_index()
print(type(Total)) #pandas.core.frame.DataFrame
print(Total)
# PAIS VENTAS
#0 Argentina 100
#1 Chile 300
#2 Perú 100
#Opcional con lambda:
#df.groupby('PAIS').VENTAS.apply(lambda x: x.sum()).reset_index()
#Ejemplo 03: Dado el siguiente DataFrame:
#1) Mediante pivot mostrar mejor los datos
#2) Mediante pivot_table mostrar un resumen de ventas
import pandas as pd
df = pd.DataFrame({"PAIS" : ["Chile","Argentina","Perú","Chile","Chile"],
"CIUDAD" : ["Santiago","Córdoba","Lima","Antofagasta","Concepción"],
"VENTAS" : [100,100,100,100,100]})
print(df)
# PAIS CIUDAD VENTAS
#0 Chile Santiago 100
#1 Argentina Córdoba 100
#2 Perú Lima 100
#3 Chile Antofagasta 100
#4 Chile Concepción 100
#1 - Mediante pivot mostrar mejor los datos
#pivot()se utiliza para pivotar sin agregación. Por lo tanto, no puede lidiar con valores duplicados para un par índice / columna.
# df.pivot(columns='Columna_a_pivotar',index='Columnas_filas'), values = 'Columnas_valores')
# En filas va PAIS, en columnas CUIDAD y en valores VENTAS
salida = df.pivot(index='PAIS',columns="CIUDAD", values= 'VENTAS').reset_index()
print(salida)
#CIUDAD PAIS Antofagasta Concepción Córdoba Lima Santiago
#0 Argentina NaN NaN 100.0 NaN NaN
#1 Chile 100.0 100.0 NaN NaN 100.0
#2 Perú NaN NaN NaN 100.0 NaN
#2 - Mediante pivot_table mostrar un resumen de ventas por País y Cuidad.
salida = pd.pivot_table(df,values = 'VENTAS', index = 'PAIS', columns = 'CIUDAD', aggfunc = np.sum)
print(salida)
#CIUDAD Antofagasta Concepción Córdoba Lima Santiago
#PAIS
#Argentina NaN NaN 100.0 NaN NaN
#Chile 100.0 100.0 NaN NaN 100.0
#Perú NaN NaN NaN 100.0 NaN
#Nota: Aunque parece que es lo mismo que el anterior ejercicio, pivot no soporte el siguiente ejemplo. (Repetir índice y columna), ni tampoco soporta agregaciones.
df = pd.DataFrame({"PAIS" : ["Chile","Argentina","Perú","Chile","Chile"],
"CIUDAD" : ["Santiago","Córdoba","Lima","Santiago","Concepción"],
"VENTAS" : [100,100,100,100,100]})
pd.pivot_table(df,values = 'VENTAS', index = 'PAIS', columns = 'CIUDAD', aggfunc = np.sum)
#CIUDAD Concepción Córdoba Lima Santiago
#PAIS
#Argentina NaN 100.0 NaN NaN
#Chile 100.0 NaN NaN 200.0
#Perú NaN NaN 100.0 NaN
#Ejemplo 04: Dado el siguiente DataFrame:
#1) Mediante pivot_table filas = TIPO / columnas = PORTE / valores = VALOR1 / fun = suma
#2) Mediante pivot_table filas = TIPO y CANTIDAD / columnas = PORTE / valores = VALOR1 / fun = suma y reemplazar NaN por un 0.
#3) Mediante pivot_table filas = PORTE / columnas = "" / valores = VALOR1 y VALOR2 / fun = max y min respectivamente.
import pandas as pd
df = pd.DataFrame({"TIPO": ["A", "A", "A", "A", "A",
"B", "B", "B", "B"],
"CANTIDAD": ["uno", "uno", "uno", "dos", "dos",
"uno", "uno", "dos", "dos"],
"PORTE": ["chico", "largo", "largo", "mediano",
"chico", "largo", "mediano", "chico",
"largo"],
"VALOR1": [1, 2, 2, 3, 3, 4, 5, 6, 7],
"VALOR2": [10, 20, 30, 40, 50, 60, 70, 30, 10]})
print(df)
# TIPO CANTIDAD PORTE VALOR1 VALOR2
#0 A uno chico 1 10
#1 A uno largo 2 20
#2 A uno largo 2 30
#3 A dos mediano 3 40
#4 A dos chico 3 50
#5 B uno largo 4 60
#6 B uno mediano 5 70
#7 B dos chico 6 30
#8 B dos largo 7 10
#1 - Mediante pivot_table filas = TIPO / columnas = PORTE / valores = VALOR / fun = suma
salida = pd.pivot_table(df, values='VALOR1', index=['TIPO'],
columns=['PORTE'], aggfunc=np.sum).reset_index()
print(salida)
# PORTE TIPO chico largo mediano
#0 A 4 4 3
#1 B 6 11 5
#2 - Mediante pivot_table filas = TIPO y CANTIDAD / columnas = PORTE / valores = VALOR / fun = suma y reemplazar NaN por un 0.
salida = pd.pivot_table(df, values='VALOR1', index=['TIPO','CANTIDAD'],
columns=['PORTE'], aggfunc=np.sum, fill_value = 0).reset_index()
print(salida)
# PORTE TIPO CANTIDAD chico largo mediano
#0 A dos 3 0 3
#1 A uno 1 4 0
#2 B dos 6 7 0
#3 B uno 0 4 5
#3 - Mediante pivot_table filas = PORTE / columnas = "" / valores = VALOR1 y VALOR2 / fun = max y min respectivamente.
salida = pd.pivot_table(df, index = 'PORTE', values = ['VALOR1','VALOR2'], aggfunc = {'VALOR1':np.max,'VALOR2':np.min}).reset_index()
#Si por ejemplo nos gustaría que tenga más de un cálculo pondriamos VALOR2':[np.min,np.max...]
print(salida)
# PORTE VALOR1 VALOR2
#0 chico 6 10
#1 largo 7 10
#2 mediano 5 40
#Ejemplo 05: Dado el siguiente DataFrame usar AGG para:
#1) Para los columas VALOR1 y VALOR2 calcular suma, mínimo y maximo en forma de columna.
#2) Para los columas VALOR1 y VALOR2 calcular suma, mínimo y maximo en forma de fila.
#3) Mediante gruopby agrupar por PORTE y para las columnas numericas calcular la suma
import pandas as pd
df = pd.DataFrame({"TIPO": ["A", "A", "A", "A", "A",
"B", "B", "B", "B"],
"CANTIDAD": ["uno", "uno", "uno", "dos", "dos",
"uno", "uno", "dos", "dos"],
"PORTE": ["chico", "largo", "largo", "mediano",
"chico", "largo", "mediano", "chico",
"largo"],
"VALOR1": [1, 2, 2, 3, 3, 4, 5, 6, 7],
"VALOR2": [10, 20, 30, 40, 50, 60, 70, 30, 10]})
print(df)
# TIPO CANTIDAD PORTE VALOR1 VALOR2
#0 A uno chico 1 10
#1 A uno largo 2 20
#2 A uno largo 2 30
#3 A dos mediano 3 40
#4 A dos chico 3 50
#5 B uno largo 4 60
#6 B uno mediano 5 70
#7 B dos chico 6 30
#8 B dos largo 7 10
#1 - Para los columas VALOR1 y VALOR2 calcular suma, mínimo y maximo en forma de columna.
salida = df[['VALOR1','VALOR2']].agg([sum,min,max], axis = "rows")
print(salida)
# VALOR1 VALOR2
#sum 33 320
#min 1 10
#max 7 70
#2 - Para los columas VALOR1 y VALOR2 calcular suma, mínimo y maximo en forma de fila.
salida = df[['VALOR1','VALOR2']].agg([sum,min,max], axis = "columns")
print(salida)
# sum min max
#0 11 1 10
#1 22 2 20
#2 32 2 30
#3 43 3 40
#4 53 3 50
#5 64 4 60
#6 75 5 70
#7 36 6 30
#8 17 7 10
#3 - Mediante groupby agrupar por PORTE y para las columnas numericas calcular la suma
df.groupby('PORTE').agg('sum').reset_index()
print(salida)
# PORTE VALOR1 VALOR2
#0 chico 10 90
#1 largo 15 120
#2 mediano 8 110
#Fusionar objetos DataFrame o Series con nombre con una combinación de estilo de base de datos. La unión se realiza en columnas o índices.
#Ejemplo 01: Dados los dataframe df_pa y df_ps hacer un merge (inner) entre tablas de todas las formas posibles y verlo resultados. (Claves igual nombre - PERSONA)
import pandas as pd
df_pa = pd.DataFrame({
'PERSONA':['cristobal','cristian','juan','cony','alberto'],
'ANIOS':[10,4,4,3,5]
})
# PERSONA ANIOS
#0 cristobal 10
#1 cristian 4
#2 juan 4
#3 cony 3
#4 alberto 5
df_ps = pd.DataFrame({
'PERSONA':['alberto','cristian','juan','cony','jorge'],
'SALARIO':[1,2,3,4,5]
})
# PERSONA SALARIO
#0 alberto 1
#1 cristian 2
#2 juan 3
#3 cony 4
#4 jorge 5
#Opción 01:
salida = pd.merge(df_pa,df_ps,how="inner",on="PERSONA")
#Opcionales, idéntica salida:
#df_pa.merge(df_ps) | pd.merge(df_pa,df_ps)
print(salida)
# PERSONA SALARIO ANIOS
#0 alberto 1 5
#1 cristian 2 4
#2 juan 3 4
#3 cony 4 3
#Opción 02:
salida = pd.merge(df_ps,df_pahow="inner",on="PERSONA")
#Opcional, idéntica salida:
#df_ps.merge(df_pa) | pd.merge(df_ps,df_pa)
print(salida)
# PERSONA ANIOS SALARIO
#0 cristian 4 2
#1 juan 4 3
#2 cony 3 4
#3 alberto 5 1
#Ejemplo 02: Dados los dataframe df_pa y df_ps hacer un merge (inner join) entre tablas de todas las formas posibles y verlo resultados. (Claves diferente nombre PERSONA != FUNC..)
import pandas as pd
df_pa = pd.DataFrame({
'PERSONA':['cristobal','cristian','juan','cony','alberto'],
'ANIOS':[10,4,4,3,5]
})
# PERSONA ANIOS
#0 cristobal 10
#1 cristian 4
#2 juan 4
#3 cony 3
#4 alberto 5
df_ps = pd.DataFrame({
'FUNCIONARIOS':['alberto','cristian','juan','cony','jorge'],
'SALARIO':[1,2,3,4,5]})
})
# FUNCIONARIOS SALARIO
#0 alberto 1
#1 cristian 2
#2 juan 3
#3 cony 4
#4 jorge 5
salida = pd.merge(df_pa,df_ps,how='inner',left_on='PERSONA',right_on='FUNCIONARIOS')
print(salida)
# PERSONA ANIOS FUNCIONARIOS SALARIO
#0 cristian 4 cristian 2
#1 juan 4 juan 3
#2 cony 3 cony 4
#3 alberto 5 alberto 1
#Opcional: Usar rename para dejar las claves con el mismo nombre y ver ejemplo 1
#Ejemplo 03: Dados los dataframe df_pa y df_ps:
#1) Hacer un left merge entre ellos
#2) Hacer un right merge entre ellos
#3) Hacer un outer merge entre ellos
import pandas as pd
df_pa = pd.DataFrame({
'PERSONA':['cristobal','cristian','juan','cony','alberto'],
'ANIOS':[10,4,4,3,5]
})
# PERSONA ANIOS
#0 cristobal 10
#1 cristian 4
#2 juan 4
#3 cony 3
#4 alberto 5
df_ps = pd.DataFrame({
'FUNCIONARIOS':['alberto','cristian','juan','cony','jorge'],
'SALARIO':[1,2,3,4,5]})
})
# FUNCIONARIOS SALARIO
#0 alberto 1
#1 cristian 2
#2 juan 3
#3 cony 4
#4 jorge 5
#1 - Hacer un left merge entre ellos
salida = pd.merge(df_pa,df_ps,how='left',left_on='PERSONA',right_on='FUNCIONARIOS')
print(salida)
# PERSONA ANIOS FUNCIONARIOS SALARIO
#0 cristobal 10 NaN NaN
#1 cristian 4 cristian 2.0
#2 juan 4 juan 3.0
#3 cony 3 cony 4.0
#4 alberto 5 alberto 1.0
#2 - Hacer un right merge entre ellos
salida = pd.merge(df_pa,df_ps,how='right',left_on='PERSONA',right_on='FUNCIONARIOS')
print(salida)
# PERSONA ANIOS FUNCIONARIOS SALARIO
#0 cristian 4.0 cristian 2
#1 juan 4.0 juan 3
#2 cony 3.0 cony 4
#3 alberto 5.0 alberto 1
#4 NaN NaN jorge 5
#3 - Hacer un outer merge entre ellos
salida = pd.merge(df_pa,df_ps,how='outer',left_on='PERSONA',right_on='FUNCIONARIOS')
print(salida)
# PERSONA ANIOS FUNCIONARIOS SALARIO
#0 cristobal 10.0 NaN NaN
#1 cristian 4.0 cristian 2.0
#2 juan 4.0 juan 3.0
#3 cony 3.0 cony 4.0
#4 alberto 5.0 alberto 1.0
#5 NaN NaN jorge 5.0
#Nota: Se puede aplicar luego salida.fillna(0) para reemplazar los NaN por 0.
#Ejemplo 04: Dados los dataframe df1 y df2, concatenelarlos hacia abajo y hacia al lado
import pandas as pd
df1 = pd.DataFrame({
'PERSONA':['cristobal','cristian','juan','cony','alberto'],
'ANIOS':[10,4,4,3,5]
})
# PERSONA ANIOS
#0 cristobal 10
#1 cristian 4
#2 juan 4
#3 cony 3
#4 alberto 5
df2 = pd.DataFrame({
'PERSONA':['consuelo','rebeca','camila','gladys'],
'ANIOS':[5,8,1,2]
})
# FUNCIONARIOS SALARIO
#0 alberto 1
#1 cristian 2
#2 juan 3
#3 cony 4
#4 jorge 5
#Concatenarlos hacia abajo
salida = pd.concat([df1,df2], axis = "rows").reset_index(drop=True)
print(salida)
# PERSONA ANIOS
#0 cristobal 10
#1 cristian 4
#2 juan 4
#3 cony 3
#4 alberto 5
#5 consuelo 5
#6 rebeca 8
#7 camila 1
#8 gladys 2
#Concatenarlos hacia el lado
salida = pd.concat([df1,df2], axis = "columns").reset_index(drop=True)
print(salida)
# PERSONA ANIOS PERSONA ANIOS
#0 cristobal 10 consuelo 5.0
#1 cristian 4 rebeca 8.0
#2 juan 4 camila 1.0
#3 cony 3 gladys 2.0
#4 alberto 5 NaN NaN
#El paquete dfply hace posible la manipulación de datos al estilo de R con tuberías en python en pandas DataFrames.
#Ejemplo 01: Usando el dataframe diamonds, ver los 2 primeros y 2 últimos registros.
diamonds >> head(2)
#carat cut color clarity depth table price x y z
#0 0.23 Ideal E SI2 61.5 55.0 326 3.95 3.98 2.43
#1 0.21 Premium E SI1 59.8 61.0 326 3.89 3.84 2.31
diamonds >> tail(2)
#carat cut color clarity depth table price x y z
#53938 0.86 Premium H SI2 61.0 58.0 2757 6.15 6.12 3.74
#53939 0.75 Ideal D SI2 62.2 55.0 2757 5.83 5.87 3.64
#Ejemplo 02: Sobrescribir el dataframe diamonds con los 3 primeros registros
diamonds >>= head(3)
diamonds
# carat cut color clarity depth table price x y z
#0 0.23 Ideal E SI2 61.5 55.0 326 3.95 3.98 2.43
#1 0.21 Premium E SI1 59.8 61.0 326 3.89 3.84 2.31
#2 0.23 Good E VS1 56.9 65.0 327 4.05 4.07 2.31
#Ejemplo 01: Usando el dataframe diamonds, seleccione las 2 primeras columnas.
#Tips: Usar columns para ver las columnas y luego select con un X. antes de cada nombre de columna,
diamonds.columns
#Index(['carat', 'cut', 'color', 'clarity', 'depth', 'table', 'price', 'x', 'y',
# 'z'],
# dtype='object')
diamonds >> select(X.carat,X.cut) >> head(2)
# carat cut
#0 0.23 Ideal
#1 0.21 Premium
#Nota: No se puede usar ":" entre columnas para traer varias como en R.
#Ejemplo 02: Usando el dataframe diamonds, seleccione las 3 primeras columnas usando su correspondiente valor y luego por su nombre. (Traer sólo 2 registros)
diamonds.columns
#Index(['carat', 'cut', 'color', 'clarity', 'depth', 'table', 'price', 'x', 'y',
# 'z'],
# dtype='object')
diamonds >> select(0,1,2) >> head(2)
# carat cut color
#0 0.23 Ideal E
#1 0.21 Premium E
diamonds >> select(['carat','cut','color'])
# carat cut color
#0 0.23 Ideal E
#1 0.21 Premium E
#Ejemplo 03: Usando el dataframe diamonds, seleccionar todas las columnas menos "caract" ni "price" (Traer sólo 2 registros)
diamonds.columns
#Index(['carat', 'cut', 'color', 'clarity', 'depth', 'table', 'price', 'x', 'y',
# 'z'],
# dtype='object')
diamonds >> select(~X.carat,~X.price) >> head(2)
# cut color clarity depth table x y z
#0 Ideal E SI2 61.5 55.0 3.95 3.98 2.43
#1 Premium E SI1 59.8 61.0 3.89 3.84 2.31
#Ejemplo 04: Usando el dataframe diamonds:
#1) Columnas que inician con letra "c" - Mostrar sólo 2 registros.
#2) Columnas que terminan con la letra "e" - Mostrar sólo 2 registros.
#3)
#4)
#5)
#6)
diamonds.columns
#Index(['carat', 'cut', 'color', 'clarity', 'depth', 'table', 'price', 'x', 'y',
# 'z'],
# dtype='object')
#TIPS
#starts_with(): Comienzan con.
#ends_with(suffix): Terminan con.
#contains(substr): Contienen.
#everything(): Todas las columnas.
#columns_between(start_col, end_col, inclusive=True): Búsqueda entre columnas.
#columns_to(end_col, inclusive=True): Entra columnas hasta una final.
#columns_from(start_col): Columnas que comienzan en una columna especifica.
#1 - Columnas que inician con letra "c" - Mostrar sólo 2 registros
diamonds >> select(starts_with('c')) >> head(2)
# carat cut color clarity
#0 0.23 Ideal E SI2
#1 0.21 Premium E SI1
#2 - Columnas que terminan con letra "e" - Mostrar sólo 2 registros
diamonds >> select(ends_with('e')) >> head(2)
# table price
#0 55.0 326
#1 61.0 326
#Matplotlib es una biblioteca para la generación de gráficos a partir de datos contenidos en listas o arrays en el lenguaje de programación Python y su extensión matemática NumPy. Proporciona una API, pylab, diseñada para recordar a la de MATLAB.
#Fuente: https://es.wikipedia.org/wiki/Matplotlib
#Instalación: pip install matplotlib
#Ejemplo 01: Dado las listas x e y graficar
from matplotlib import pyplot as plt
x = [1,2,3,4,5]
y = [6,7,8,9,10]
#Graficamos
plt.plot(x,y)
#Evitamos que nos salga [<matplotlib.lines.Line2D at 0x261b8dda888>]
plt.show()
GL Ejemplo 01
#Ejemplo 02: Dado las listas de días, gastos_1 y gastos_2:
#1) Graficar ambas gastos en paralelo.
#2) Al paso anterior, poner color rojo en Hexadecimal a gastos_2 y verde a gastos_1
#3) Al paso anterior, gastos_1 porner línea discontinua y gastos_1 un marcador redondo
#4) Al paso anterior, poner nombres a ambos ejes
#5) Al paso anterior, poner título
#6) Al paso anterior, solo mostrar eje x entre 2 - 4 y eje y entre 3 - 10
from matplotlib import pyplot as plt
dias = [0,1,2,3,4]
gastos_1 = [10,12,8,4,13]
gastos_2 = [5,17,2,4,11]
#1 - Graficar ambas gastos en paralelo.
plt.plot(dias,gastos_1)
plt.plot(dias,gastos_2)
#Evitamos que nos salga [<matplotlib.lines.Line2D at 0x261b8dda888>] y seperada este gráficos de otros.
plt.show()
#2 - Al paso anterior, poner color rojo en Hexadecimal a gastos_2 y verde a gastos_1
plt.plot(dias,gastos_1, color = "green")
plt.plot(dias,gastos_2, color = "#ff0000")
#Evitamos que nos salga [<matplotlib.lines.Line2D at 0x261b8dda888>] y seperada este gráficos de otros.
plt.show()
#3 - Al paso anterior, gastos_1 porner línea discontinua y gastos_1 un marcador redondo
plt.plot(dias,gastos_1, color = "green", linestyle="--")
plt.plot(dias,gastos_2, color = "#ff0000", marker="o")
#Evitamos que nos salga [<matplotlib.lines.Line2D at 0x261b8dda888>] y seperada este gráficos de otros.
plt.show()
#4 - Al paso anterior, poner nombres a ambos ejes
plt.plot(dias,gastos_1, color = "green", linestyle="--")
plt.plot(dias,gastos_2, color = "#ff0000", marker="o")
#Nombres a los ajes
plt.xlabel("Días")
plt.ylabel("Gastos")
#Evitamos que nos salga [<matplotlib.lines.Line2D at 0x261b8dda888>] y seperada este gráficos de otros.
plt.show()
#5 - Al paso anterior, poner título
plt.plot(dias,gastos_1, color = "green", linestyle="--")
plt.plot(dias,gastos_2, color = "#ff0000", marker="o")
#Nombres a los ajes
plt.xlabel("Días")
plt.ylabel("Gastos")
#Título
plt.title("Gastos diarios")
#Evitamos que nos salga [<matplotlib.lines.Line2D at 0x261b8dda888>] y seperada este gráficos de otros.
plt.show()
#6 - Al paso anterior, solo mostrar eje x entre 2 - 4 y eje y entre 3 - 10
plt.plot(dias,gastos_1, color = "green", linestyle="--")
plt.plot(dias,gastos_2, color = "#ff0000", marker="o")
#Nombres a los ajes
plt.xlabel("Días")
plt.ylabel("Gastos")
#Título
plt.title("Gastos diarios")
#Fijas los másximos y mínimos de ambos ejes
plt.axis([2,4,3,10])
#Evitamos que nos salga [<matplotlib.lines.Line2D at 0x261b8dda888>] y seperada este gráficos de otros.
plt.show()
GL Ejemplo 02_1
GL Ejemplo 02_2
GL Ejemplo 02_3
GL Ejemplo 02_4
GL Ejemplo 02_5
GL Ejemplo 02_6
#Plotly es una empresa de informática técnica con sede en Montreal , Quebec , que desarrolla herramientas de visualización y análisis de datos en línea . Plotly proporciona herramientas de gráficos, análisis y estadísticas en línea para individuos y colaboración, así como bibliotecas de gráficos científicos para Python , R , MATLAB , Perl , Julia , Arduino y REST .
#Fuente: https://en.wikipedia.org/wiki/Plotly
#Instalación: pip install plotly
#Ejemplo 01: Dado el dataframe df, graficar las ventas por día con plotly express.
import plotly.express as px
import pandas as pd
df = pd.DataFrame({
'dias':[0,1,2,3,4],
'ventas':[10,5,12,17,4]
})
#df
# dias ventas
#0 0 10
#1 1 5
#2 2 12
#3 3 17
#4 4 4
#Construimos el gráfico
grafico = px.line(df, x = "dias", y = "ventas", title = "Ventas por día")
#Mostramos el gráfico
grafico.show()
#Ejemplo 02: Dado el dataframe df, graficar las ventas por día con plotly express.
import plotly.express as px
import pandas as pd
df = pd.DataFrame({
'dias':[0,1,2,3,4],
'ventas':[10,5,12,17,4]
})
#df
# dias ventas
#0 0 10
#1 1 5
#2 2 12
#3 3 17
#4 4 4
#Construimos el gráfico
grafico = px.line(df, x = "dias", y = "ventas", title = "Ventas por día")
#Mostramos el gráfico
grafico.show()