Manual Python DataScience
Manual Python DataScience
Febrero 2020
Términos de la licencia c
Esta obra está bajo una licencia Atribución–No comercial–Compartir igual 4.0 Internacional de Creative Com-
mons. Para ver una copia de esta licencia, visite https://creativecommons.org/licenses/by-nc-sa/4.0/deed.
es.
No hay restricciones adicionales — No puede aplicar términos legales ni medidas tecnológicas que restrinjan
legalmente a otras a hacer cualquier uso permitido por la licencia.
• Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra.
• Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de
autor
• Nada en esta licencia menoscaba o restringe los derechos morales del autor.
Manual de Python Índice general
Índice general
1 Introducción a Python 8
1.1 ¿Qué es Python? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2 Principales ventajas de Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3 Tipos de ejecución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3.1 Interpretado en la consola de Python . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3.2 Interpretado en fichero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3.3 Compilado a bytecode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.3.4 Compilado a ejecutable del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3 Estructuras de control 18
3.1 Condicionales (if) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.2 Bucles condicionales (while) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.3 Bucles iterativos (for) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3
Manual de Python Índice general
5 Funciones 29
5.1 Funciones (def) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5.1.1 Parámetros de una función . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5.1.2 Argumentos de la llamada a una función . . . . . . . . . . . . . . . . . . . . . . . . 29
5.1.3 Retorno de una función . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
5.2 Argumentos por defecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
5.3 Pasar un número indeterminado de argumentos . . . . . . . . . . . . . . . . . . . . . . . 30
5.4 Ámbito de los parámetros y variables de una función . . . . . . . . . . . . . . . . . . . . . 31
5.5 Ámbito de los parámetros y variables de una función . . . . . . . . . . . . . . . . . . . . . 31
5.6 Paso de argumentos por referencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
5.7 Documentación de funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
5.8 Funciones recursivas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5.8.1 Funciones recursivas múltiples . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5.8.2 Los riesgos de la recursión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5.9 Módulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5.9.1 Importación completa de módulos (import) . . . . . . . . . . . . . . . . . . . . . 34
5.9.2 Importación parcial de módulos (from import) . . . . . . . . . . . . . . . . . . . 34
5.9.3 Módulos de la librería estándar más importantes . . . . . . . . . . . . . . . . . . . 35
5.9.4 Otros módulos imprescindibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.10 Programación funcional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.10.1 Funciones anónimas (lambda) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5.10.2 Aplicar una función a todos los elementos de una colección iterable (map) . . . . . . . 36
5.10.3 Filtrar los elementos de una colección iterable (filter) . . . . . . . . . . . . . . . . . 37
5.10.4 Combinar los elementos de varias colecciones iterables (zip) . . . . . . . . . . . . . 37
5.10.5 Operar todos los elementos de una colección iterable (reduce) . . . . . . . . . . . . 37
5.11 Comprensión de colecciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.11.1 Comprensión de listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.11.2 Comprensión de diccionarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4
Manual de Python Índice general
6 Ficheros y excepciones 39
6.1 Ficheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
6.1.1 Creación y escritura de ficheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
6.1.2 Añadir datos a un fichero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
6.1.3 Leer datos de un fichero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
6.1.4 Leer datos de un fichero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
6.1.5 Cerrar un fichero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
6.1.6 Renombrado y borrado de un fichero . . . . . . . . . . . . . . . . . . . . . . . . . 40
6.1.7 Renombrado y borrado de un fichero o directorio . . . . . . . . . . . . . . . . . . . 41
6.1.8 Creación, cambio y eliminación de directorios . . . . . . . . . . . . . . . . . . . . . 41
6.1.9 Leer un fichero de internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
6.2 Control de errores mediante excepciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
6.2.1 Tipos de excepciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
6.2.2 Control de excepciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
6.2.3 Control de excepciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
7 La librería Numpy 43
7.1 La librería NumPy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
7.2 La clase de objetos array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
7.3 Creación de arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
7.3.1 Atributos de un array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
7.3.2 Acceso a los elementos de un array . . . . . . . . . . . . . . . . . . . . . . . . . . 46
7.3.3 Filtrado de elementos de un array . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
7.3.4 Operaciones matemáticas con arrays . . . . . . . . . . . . . . . . . . . . . . . . . 46
7.3.5 Operaciones matemáticas a nivel de array . . . . . . . . . . . . . . . . . . . . . . . 47
8 La librería Pandas 47
8.1 La librería Pandas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
8.1.1 Tipos de datos de Pandas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
8.2 La clase de objetos Series . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
8.2.1 Creación de una serie a partir de una lista . . . . . . . . . . . . . . . . . . . . . . . 49
8.2.2 Creación de una serie a partir de un diccionario . . . . . . . . . . . . . . . . . . . . 49
8.2.3 Atributos de una serie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
8.2.4 Acceso a los elementos de una serie . . . . . . . . . . . . . . . . . . . . . . . . . . 50
8.2.5 Resumen descriptivo de una serie . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
8.2.6 Aplicar operaciones a una serie . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
8.2.7 Aplicar funciones a una serie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
8.2.8 Eliminar los dados desconocidos en una serie . . . . . . . . . . . . . . . . . . . . . 53
8.3 La clase de objetos DataFrame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
8.3.1 Creación de un DataFrame a partir de un diccionario de listas . . . . . . . . . . . . . 54
8.3.2 Creación de un DataFrame a partir de una lista de listas . . . . . . . . . . . . . . . . 55
8.3.3 Creación de un DataFrame a partir de una lista de diccionarios . . . . . . . . . . . . . 55
8.3.4 Creación de un DataFrame a partir de un array . . . . . . . . . . . . . . . . . . . . . 56
5
Manual de Python Índice general
9 La librería Matplotlib 71
9.1 La librería Matplotlib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
9.1.1 Tipos de gráficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
9.1.2 Creación de gráficos con matplotlib . . . . . . . . . . . . . . . . . . . . . . . . . . 71
9.1.3 Diagramas de dispersión o puntos . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
9.1.4 Diagramas de líneas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
9.1.5 Diagramas de areas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
9.1.6 Diagramas de barras verticales . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
9.1.7 Diagramas de barras horizontales . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
9.1.8 Histogramas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
9.1.9 Diagramas de sectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
9.1.10 Diagramas de caja y bigotes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
9.1.11 Diagramas de violín . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
9.1.12 Diagramas de contorno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
9.1.13 Mapas de color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
6
Manual de Python Índice general
7
Manual de Python 1 INTRODUCCIÓN A PYTHON
1 Introducción a Python
• Programación imperativa
• Programación funcional
• Programación orientada a objetos
Fue creado por Guido van Rossum en 1990 aunque actualmente es desarrollado y mantenido por la Python
Software Foundation
1 > python
2 >>> name = "Alf"
3 >>> print("Hola ", name)
4 Hola Alf
1 # Fichero hola.py
2 name = "Alf"
3 print("Hola ", name)
8
Manual de Python 2 TIPOS DE DATOS SIMPLES
También se puede hacer el fichero ejecutable indicando en la primera línea la ruta hasta el intérprete de Pyt-
hon.
1 #!/usr/bin/python3
2 name = "Alf"
3 print("Hola", name)
1 # Fichero hola.py
2 name = "Alf"
3 print("Hola " + name)
Hay distintos paquetes que permiten compilar a un ejecutable del sistema operativo usado, por ejemplo
pyinstaller.
• Números (numbers): Secuencia de dígitos (pueden incluir el - para negativos y el . para decimales) que
representan números.
Ejemplo. 0, -1, 3.1415.
9
Manual de Python 2 TIPOS DE DATOS SIMPLES
• Cadenas (strings): Secuencia de caracteres alfanuméricos que representan texto. Se escriben entre co-
millas simples o dobles.
Ejemplo. ‘Hola’, “Adiós”.
• Booleanos (boolean): Contiene únicamente dos elementos True y False que representan los valores
lógicos verdadero y falso respectivamente.
• Listas (lists): Colecciones de objetos que representan secuencias ordenadas de objetos de distintos tipos.
Se representan con corchetes y los elementos se separan por comas.
Ejemplo. [1, “dos”, [3, 4], True].
• Tuplas (tuples). Colecciones de objetos que representan secuencias ordenadas de objetos de distintos
tipos. A diferencia de las listas son inmutables, es decir, que no cambian durante la ejecución. Se repre-
sentan mediante paréntesis y los elementos se separan por comas.
Ejemplo. (1, ‘dos’, 3)
• Diccionarios (dictionaries): Colecciones de objetos con una clave asociada. Se representan con llaves,
los pares separados por comas y cada par contiene una clave y un objeto asociado separados por dos
puntos.
Ejemplo. {‘pi’:3.1416, ‘e’:2.718}.
1 >>> type(1)
2 <class 'int'>
3 >>> type("Hola")
4 <class 'str'>
5 >>> type([1, "dos", [3, 4], True])
6 <class 'list'>
7 >>>type({'pi':3.1416, 'e':2.718})
8 <class 'dict'>
9 >>>type((1, 'dos', 3))
10 <class 'tuple'>
Secuencia de dígitos (pueden incluir el - para negativos y el . para decimales) que representan números. Pueden
ser enteros (int) o reales (float).
1 >>> type(1)
2 <class 'int'>
10
Manual de Python 2 TIPOS DE DATOS SIMPLES
3 >>> type(-2)
4 <class 'int'>
5 >>> type(2.3)
6 <class 'float'>
1 Funciones predefinidas
2 Potencias
3 Productos y cocientes
4 Sumas y restas
1 >>> 2+3
2 5
3 >>> 5*-2
4 -10
5 >>> 5/2
6 2.5
7 >>> 5//2
8 2
9 >>> (2+3)**2
10 25
• Operadores lógicos: == (igual que), > (mayor que), < (menor que), >= (mayor o igual que), <= (menor o
igual que), != (distinto de).
1 >>> 3==3
2 True
3 >>> 3.1<=3
4 False
5 >>> -1!=1
11
Manual de Python 2 TIPOS DE DATOS SIMPLES
6 True
Secuencia de caracteres alfanuméricos que representan texto. Se escriben entre comillas sencillas ’ o dobles
”.
1 'Python'
2 "123"
3 'True'
4 # Cadena vacía
5 ''
6 # Cadena con un espacio en blanco
7 ' '
8 # Cambio de línea
9 '\n'
10 # Tabulador
11 '\t'
Cadena P y t h o n
Índice positivo 0 1 2 3 4 5
Índice negativo -6 -5 -4 -3 -2 -1
También se pueden utilizar índices negativos para recorrer la cadena del final al principio.
1 >>> 'Python'[0]
2 'P'
3 >>> 'Python'[1]
4 'y'
5 >>> 'Python'[-1]
6 'n'
7 >>> 'Python'[6]
8 Traceback (most recent call last):
9 File "<stdin>", line 1, in <module>
10 IndexError: string index out of range
12
Manual de Python 2 TIPOS DE DATOS SIMPLES
2.5.2 Subcadenas
• c[i:j:k] : Devuelve la subcadena de c desde el carácter con el índice i hasta el carácter anterior al
índice j, tomando caracteres cada k.
1 >>> 'Python'[1:4]
2 'yth'
3 >>> 'Python'[1:1]
4 ''
5 >>> 'Python'[2:]
6 'thon'
7 >>> 'Python'[:-2]
8 'ytho'
9 >>> 'Python'[:]
10 'Python'
11 >>> 'Python'[0:6:2]
12 'Pto'
13
Manual de Python 2 TIPOS DE DATOS SIMPLES
1 >>> len('Python')
2 6
3 >>> min('Python')
4 'P'
5 >>> max('Python')
6 'y'
7 >>> 'Python'.upper()
8 'PYTHON'
9 >>> 'A,B,C'.split(',')
10 ['A', 'B', 'C']
11 >>> 'I love Python'.split()
12 ['I', 'love', 'Python']
• c.format(valores): Devuelve la cadena c tras sustituir los valores de la secuencia valores en los
marcadores de posición de c. Los marcadores de posición se indican mediante llaves {} en la cadena
c, y el reemplazo de los valores se puede realizar por posición, indicando en número de orden del valor
14
Manual de Python 2 TIPOS DE DATOS SIMPLES
dentro de las llaves, o por nombre, indicando el nombre del valor, siempre y cuando los valores se pasen
con el formato nombre = valor.
Los marcadores de posición, a parte de indicar la posición de los valores de reemplazo, pueden indicar también
el formato de estos. Para ello se utiliza la siguiente sintaxis:
• {:n} : Alinea el valor a la izquierda rellenando con espacios por la derecha hasta los n caracteres.
• {:>n} : Alinea el valor a la derecha rellenando con espacios por la izquierda hasta los n caracteres.
• {:^n} : Alinea el valor en el centro rellenando con espacios por la izquierda y por la derecha hasta los n
caracteres.
• {:nd} : Formatea el valor como un número entero con n caracteres rellenando con espacios blancos
por la izquierda.
• {:n.mf} : Formatea el valor como un número real con un tamaño de n caracteres (incluído el separador
de decimales) y m cifras decimales, rellenando con espacios blancos por la izquierda.
Contiene únicamente dos elementos True y False que representan los valores lógicos verdadero y falso res-
pectivamente.
False tiene asociado el valor 0 y True tiene asociado el valor 1.
• Operadores lógicos: == (igual que), > (mayor), < (menor), >= (mayor o igual que), <= (menor o igual que),
!= (distinto de).
• not b (negación) : Devuelve True si el dato booleano b es False , y False en caso contrario.
• b1 and b2 : Devuelve True si los datos booleanos b1 y b2 son True, y False en caso contrario.
• b1 or b2 : Devuelve True si alguno de los datos booleanos b1 o b2 son True, y False en caso con-
trario.
15
Manual de Python 2 TIPOS DE DATOS SIMPLES
x y not x x and y x or y
Las siguientes funciones convierten un dato de un tipo en otro, siempre y cuando la conversión sea posible.
16
Manual de Python 2 TIPOS DE DATOS SIMPLES
2.8 Variables
A diferencia de otros lenguajes no tienen asociado un tipo y no es necesario declararlas antes de usarlas (tipado
dinámico).
Para asignar un valor a una variable se utiliza el operador = y para borrar una variable se utiliza la instrucción
del.
1 lenguaje = 'Python'
2 x = 3.14
3 y = 3 + 2
4 # Asignación múltiple
5 a1, a2 = 1, 2
6 # Intercambio de valores
7 a, b = b, a
8 # Incremento (equivale a x = x + 2)
9 x += 2
10 # Decremento (equivale a x = x - 1)
11 x -= 1
12 # Valor no definido
13 x = None
14 del x
Para asignar a una variable un valor introducido por el usuario en la consola se utiliza la instrucción
input(mensaje) : Muestra la cadena mensaje por la terminal y devuelve una cadena con la entrada del
usuario.
El valor devuelto siempre es una cadena, incluso si el usuario introduce un dato numérico.
17
Manual de Python 3 ESTRUCTURAS DE CONTROL
donde
• dato1, ... son los datos a imprimir y pueden indicarse tantos como se quieran separados por comas.
• sep establece el separador entre los datos, que por defecto es un espacio en blanco ' '.
• end indica la cadena final de la impresión, que por defecto es un cambio de línea \n.
• file indica la dirección del flujo de salida, que por defecto es la salida estándar sys.stdout.
1 >>> print('Hola')
2 Hola
3 >>> name = 'Alf'
4 >>> print('Hola', name)
5 Hola Alf
6 >>> print('El valor de pi es', 3.1415)
7 El valor de pi es 3.1415
8 >>> print('Hola', name, sep='')
9 HolaAlf
10 >>> print('Hola', name, end='!\n')
11 Hola Alf!
3 Estructuras de control
Evalúa la expresión lógica condición1 y ejecuta el primer bloque de código si es True; si no, evalúa la si-
guientes condiciones hasta llegar a la primera que es True y ejecuta el bloque de código asociado. Si ninguna
condición es True ejecuta el bloque de código después de else:.
Pueden aparecer varios bloques elif pero solo uno else al final.
La instrucción condicional permite evaluar el estado del programa y tomar decisiones sobre qué código ejecutar
en función del mismo.
18
Manual de Python 3 ESTRUCTURAS DE CONTROL
1 >>> edad = 14
2 >>> if edad <= 18 :
3 ... print('Menor')
4 ... elif edad > 65:
5 ... print('Jubilado')
6 ... else:
7 ... print('Activo')
8 ...
9 Menor
10 >>> age = 20
11 >>> if edad <= 18 :
12 ... print('Menor')
13 ... elif edad > 65:
14 ... print('Jubilado')
15 ... else:
16 ... print('Activo')
17 ...
18 Activo
Repite la ejecución del bloque de código mientras la expresión lógica condición sea cierta.
Se puede interrumpir en cualquier momento la ejecución del bloque de código con la instrucción break.
Alternativa:
19
Manual de Python 4 TIPOS DE DATOS ESTRUCTURADOS
8 Introduce un número: 1
9 Introduce un número: 0
10 >>>
Repite la ejecución del bloque de código para cada elemento de la secuencia secuencia, asignado dicho
elemento a i en cada repetición.
Se puede interrumpir en cualquier momento la ejecución del bloque de código con la instrucción break o
saltar la ejecución para un determinado elemento de la secuencia con la instrucción continue.
El bloque de código debe estar indentado por 4 espacios.
Se utiliza fundamentalmente para recorrer colecciones de objetos como cadenas, listas, tuplas o dicciona-
rios.
A menudo se usan con la instrucción range:
4.1 Listas
20
Manual de Python 4 TIPOS DE DATOS ESTRUCTURADOS
Se caracterizan por:
• Tienen orden.
• Pueden contener elementos de distintos tipos.
• Son mutables, es decir, pueden alterarse durante la ejecución de un programa.
1 # Lista vacía
2 >>> type([])
3 <class 'list'>
4 # Lista con elementos de distintos tipos
5 >>> [1, "dos", True]
6 # Listas anidadas
7 >>> [1, [2, 3], 4]
Se pueden indicar los elementos separados por comas, mediante una cadena, o mediante una colección de
elementos iterable.
1 >>> list()
2 []
3 >>> list(1, 2, 3)
4 [1, 2, 3]
5 >>> list("Python")
6 ['P', 'y', 't', 'h', 'o', 'n']
21
Manual de Python 4 TIPOS DE DATOS ESTRUCTURADOS
4.1.3 Sublistas
• l[i:j:k] : Devuelve la sublista desde el elemento de l con el índice i hasta el elemento anterior al
índice j, tomando elementos cada k.
1 >>> a = [1, 2, 2, 3]
2 >>> len(a)
3 4
4 >>> min(a)
5 1
6 >>> max(a)
7 3
8 >>> sum(a)
9 8
10 >>> 3 in a
11 True
12 >>> a.index(2)
13 1
22
Manual de Python 4 TIPOS DE DATOS ESTRUCTURADOS
14 >>> a.count(2)
15 2
16 >>> all(a)
17 True
18 >>> any([0, False, 3<2])
19 False
1 >>> a = [1, 3]
2 >>> b = [2 , 4, 6]
3 >>> a.append(5)
4 >>> a
5 [1, 3, 5]
6 >>> a.remove(3)
7 >>> a
8 [1, 5]
9 >>> a.insert(1, 3)
10 >>> a
11 [1, 3, 5]
12 >>> b.pop()
13 6
14 >>> c = a + b
15 >>> c
16 [1, 3, 5, 2, 4]
17 >>> c.sort()
18 >>> c
19 [1, 2, 3, 4, 5]
20 >>> c.reverse()
21 >>> c
22 [5, 4, 3, 2, 1]
23
Manual de Python 4 TIPOS DE DATOS ESTRUCTURADOS
• Copia por referencia l1 = l2: Asocia la la variable l1 la misma lista que tiene asociada la variable l2,
es decir, ambas variables apuntan a la misma dirección de memoria. Cualquier cambio que hagamos a
través de l1 o l2 afectará a la misma lista.
• Copia por valor l1 = list(l2): Crea una copia de la lista asociada a l2 en una dirección de memoria
diferente y se la asocia a l1. Las variables apuntan a direcciones de memoria diferentes que contienen
los mismos datos. Cualquier cambio que hagamos a través de l1 no afectará a la lista de l2 y viceversa.
1 >>> a = [1, 2, 3]
2 >>> # copia por referencia
3 >>> b = a
4 >>> b
5 [1, 2, 3]
6 >>> b.remove(2)
7 >>> b
8 [1, 3]
9 >>> a
10 [1, 3]
1 >>> a = [1, 2, 3]
2 >>> # copia por referencia
3 >>> b = list(a)
4 >>> b
5 [1, 2, 3]
6 >>> b.remove(2)
7 >>> b
8 [1, 3]
9 >>> a
10 [1, 2, 3]
4.2 Tuplas
Se caracterizan por:
• Tienen orden.
• Pueden contener elementos de distintos tipos.
• Son inmutables, es decir, no pueden alterarse durante la ejecución de un programa.
Se usan habitualmente para representar colecciones de datos una determinada estructura semántica, como
por ejemplo un vector o una matriz.
24
Manual de Python 4 TIPOS DE DATOS ESTRUCTURADOS
1 # Tupla vacía
2 type(())
3 <class 'tuple'>
4 # Tupla con elementos de distintos tipos
5 (1, "dos", True)
6 # Vector
7 (1, 2, 3)
8 # Matriz
9 ((1, 2, 3), (4, 5, 6))
Se pueden indicar los elementos separados por comas, mediante una cadena, o mediante una colección de
elementos iterable.
1 >>> tuple()
2 ()
3 >>> tuple(1, 2, 3)
4 (1, 2, 3)
5 >>> tuple("Python")
6 ('P', 'y', 't', 'h', 'o', 'n')
7 >>> tuple([1, 2, 3])
8 (1, 2, 3)
El acceso a los elementos de una tupla se realiza del mismo modo que en las listas. También se pueden obtener
subtuplas de la misma manera que las sublistas.
Las operaciones de listas que no modifican la lista también son aplicables a las tuplas.
1 >>> a = (1, 2, 3)
2 >>> a[1]
3 2
4 >>> len(a)
5 3
6 >>> a.index(3)
7 2
8 >>> 0 in a
9 False
10 >>> b = ((1, 2, 3), (4, 5, 6))
11 >>> b[1]
12 (4, 5, 6)
25
Manual de Python 4 TIPOS DE DATOS ESTRUCTURADOS
13 >>> b[1][2]
14 6
4.3 Diccionarios
Un diccionario es una colección de pares formados por una clave y un valor asociado a la clave.
Se construyen poniendo los pares entre llaves { } separados por comas, y separando la clave del valor con dos
puntos :.
Se caracterizan por:
• No tienen orden.
• Pueden contener elementos de distintos tipos.
• Son mutables, es decir, pueden alterarse durante la ejecución de un programa.
• Las claves son únicas, es decir, no pueden repetirse en un mismo diccionario, y pueden ser de cualquier
tipo de datos inmutable.
1 # Diccionario vacío
2 type({})
3 <class 'dict'>
4 # Diccionario con elementos de distintos tipos
5 {'nombre':'Alfredo', 'despacho': 218, 'email':'asalber@ceu.es'}
6 # Diccionarios anidados
7 {'nombre_completo':{'nombre': 'Alfredo', 'Apellidos': 'Sánchez Alberca'
}}
• d[clave] devuelve el valor del diccionario d asociado a la clave clave. Si en el diccionario no existe
esa clave devuelve un error.
• d.get(clave, valor) devuelve el valor del diccionario d asociado a la clave clave. Si en el dic-
cionario no existe esa clave devuelve valor, y si no se especifica un valor por defecto devuelve None.
26
Manual de Python 4 TIPOS DE DATOS ESTRUCTURADOS
• d[clave] = valor : Añade al diccionario d el par formado por la clave clave y el valor valor.
• d.update(d2). Añade los pares del diccionario d2 al diccionario d.
• d.pop(clave, alternativo) : Devuelve del valor asociado a la clave clave del diccionario d y
lo elimina del diccionario. Si la clave no está devuelve el valor alternativo.
• d.popitem() : Devuelve la tupla formada por la clave y el valor del último par añadido al diccionario
d y lo elimina del diccionario.
• del d[clave] : Elimina del diccionario d el par con la clave clave.
• d.clear() : Elimina todos los pares del diccionario d de manera que se queda vacío.
27
Manual de Python 4 TIPOS DE DATOS ESTRUCTURADOS
9 >>> a.popitem()
10 ('universidad', 'CEU')
11 >>> a
12 {'nombre': 'Alfredo', 'email': 'asalber@ceu.es'}
13 >>> del a['email']
14 >>> a
15 {'nombre': 'Alfredo'}
16 >>> a.clear()
17 >>> a
18 {}
• Copia por referencia d1 = d2: Asocia la la variable d1 el mismo diccionario que tiene asociado la
variable d2, es decir, ambas variables apuntan a la misma dirección de memoria. Cualquier cambio que
hagamos a través de l1 o l2 afectará al mismo diccionario.
• Copia por valor d1 = list(d2): Crea una copia del diccionario asociado a d2 en una dirección de
memoria diferente y se la asocia a d1. Las variables apuntan a direcciones de memoria diferentes que
contienen los mismos datos. Cualquier cambio que hagamos a través de l1 no afectará al diccionario
de l2 y viceversa.
28
Manual de Python 5 FUNCIONES
5 Funciones
Una función es un bloque de código que tiene asociado un nombre, de manera que cada vez que se quiera
ejecutar el bloque de código basta con invocar el nombre de la función.
Una función puede recibir valores cuando se invoca a través de unas variables conocidas como parámetros que
se definen entre paréntesis en la declaración de la función. En el cuerpo de la función se pueden usar estos
parámetros como si fuesen variables.
Los valores que se pasan a la función en una llamada o invocación concreta de ella se conocen como argumentos
y se asocian a los parámetros de la declaración de la función.
• Argumentos posicionales: Se asocian a los parámetros de la función en el mismo orden que aparecen
en la definición de la función.
29
Manual de Python 5 FUNCIONES
• Argumentos por nombre: Se indica explícitamente el nombre del parámetro al que se asocia un argu-
mento de la forma parametro = argumento.
Una función puede devolver un objeto de cualquier tipo tras su invocación. Para ello el objeto a devolver de-
be escribirse detrás de la palabra reservada return. Si no se indica ningún objeto, la función no devolverá
nada.
En la definición de una función se puede asignar a cada parámetro un argumento por defecto, de manera que
si se invoca la función sin proporcionar ningún argumento para ese parámetro, se utiliza el argumento por
defecto.
Por último, es posible pasar un número variable de argumentos a un parámetro. Esto se puede hacer de dos
formas:
30
Manual de Python 5 FUNCIONES
Los parámetros y las variables declaradas dentro de una función son de ámbito local, mientras que las defini-
das fuera de ella son de ámbito ámbito global.
Tanto los parámetros como las variables del ámbito local de una función sólo están accesibles durante la eje-
cución de la función, es decir, cuando termina la ejecución de la función estas variables desaparecen y no son
accesibles desde fuera de la función.
Si en el ámbito local de una función existe una variable que también existe en el ámbito global, durante la eje-
cución de la función la variable global queda eclipsada por la variable local y no es accesible hasta que finaliza
la ejecución de la función.
31
Manual de Python 5 FUNCIONES
En Python el paso de argumentos a una función es siempre por referencia, es decir, se pasa una referencia al ob-
jeto del argumento, de manera que cualquier cambio que se haga dentro de la función mediante el parámetro
asociado afectará al objeto original, siempre y cuando este sea mutable.
Una práctica muy recomendable cuando se define una función es describir lo que la función hace en un comen-
tario.
En Python esto se hace con un docstring que es un tipo de comentario especial se hace en la línea siguiente al
encabezado de la función entre tres comillas simples ''' o dobles """.
32
Manual de Python 5 FUNCIONES
16 Parámetros:
17 - base: La base del triángulo.
18 - altura: La altura del triángulo.
19 Resultado:
20 El área del triángulo con la base y altura especificadas.
Una función recursiva es una función que en su cuerpo contiene una llama a si misma.
La recursión es una práctica común en la mayoría de los lenguajes de programación ya que permite resolver
las tareas recursivas de manera más natural.
Para garantizar el final de una función recursiva, las sucesivas llamadas tienen que reducir el grado de com-
plejidad del problema, hasta que este pueda resolverse directamente sin necesidad de volver a llamar a la
función.
Una función recursiva puede invocarse a si misma tantas veces como quiera en su cuerpo.
Aunque la recursión permite resolver las tareas recursivas de forma más natural, hay que tener cuidado con ella
porque suele consumir bastante memoria, ya que cada llamada a la función crea un nuevo ámbito local con las
variables y los parámetros de la función.
En muchos casos es más eficiente resolver la tarea recursiva de forma iterativa usando bucles.
33
Manual de Python 5 FUNCIONES
5.9 Módulos
El código de un programa en Python puede reutilizarse en otro importándolo. Cualquier fichero con código de
Python reutilizable se conoce como módulo o librería.
Los módulos suelen contener funciones reutilizables, pero también pueden definir variables con datos simples
o compuestos (listas, diccionarios, etc), o cualquier otro código válido en Python.
Python permite importar un módulo completo o sólo algunas partes de él. Cuando se importa un módulo com-
pleto, el intérprete de Python ejecuta todo el código que contiene el módulo, mientras que si solo se importan
algunas partes del módulo, solo se ejecutarán esas partes.
• import M : Ejecuta el código que contiene M y crea una referencia a él, de manera que pueden invocarse
un objeto o función f definida en él mediante la sintaxis M.f.
• import M as N : Ejecuta el código que contiene M y crea una referencia a él con el nombre N, de ma-
nera que pueden invocarse un objeto o función f definida en él mediante la sintaxis N.f. Esta forma es
similar a la anterior, pero se suele usar cuando el nombre del módulo es muy largo para utilizar un alias
más corto.
• from M import f, g, ... : Ejecuta el código que contiene M y crea referencias a los objetos f,
g, ..., de manera que pueden ser invocados por su nombre. De esta manera para invocar cualquiera
de estos objetos no hace falta precederlos por el nombre del módulo, basta con escribir su nombre.
• from M import * : Ejecuta el código que contiene M y crea referencias a todos los objetos públicos
(aquellos que no empiezan por el carácter _) definidos en el módulo, de manera que pueden ser invoca-
dos por su nombre.
Cuando se importen módulos de esta manera hay que tener cuidado de que no haya coincidencias en los nom-
bres de funciones, variables u otros objetos.
34
Manual de Python 5 FUNCIONES
Python viene con una biblioteca de módulos predefinidos que no necesitan instalarse. Algunos de los más uti-
lizados son:
Necesitan instalarse.
En Python las funciones son objetos de primera clase, es decir, que pueden pasarse como argumentos de una
función, al igual que el resto de los tipos de datos.
35
Manual de Python 5 FUNCIONES
Existe un tipo especial de funciones que no tienen nombre asociado y se conocen como funciones anónimas
o funciones lambda.
Estas funciones se suelen asociar a una variable o parámetro desde la que hacer la llamada.
5.10.2 Aplicar una función a todos los elementos de una colección iterable (map)
map(f, c) : Devuelve una objeto iterable con los resultados de aplicar la función f a los elementos de la
colección c. Si la función f requiere n argumentos entonces deben pasarse n colecciones con los argumentos.
Para convertir el objeto en una lista, tupla o diccionario hay que aplicar explícitamente las funciones list(),
tuple() o dic() respectivamente.
36
Manual de Python 5 FUNCIONES
filter(f, c) : Devuelve una objeto iterable con los elementos de la colección c que devuelven True al
aplicarles la función f. Para convertir el objeto en una lista, tupla o diccionario hay que aplicar explícitamente
las funciones list(), tuple() o dic() respectivamente.
f debe ser una función que recibe un argumento y devuelve un valor booleano.
zip(c1, c2, ...) : Devuelve un objeto iterable cuyos elementos son tuplas formadas por los elementos
que ocupan la misma posición en las colecciones c1, c2, etc. El número de elementos de las tuplas es el nú-
mero de colecciones que se pasen. Para convertir el objeto en una lista, tupla o diccionario hay que aplicar
explícitamente las funciones list(), tuple() o dic() respectivamente.
reduce(f, l) : Aplicar la función f a los dos primeros elementos de la secuencia l. Con el valor obtenido
vuelve a aplicar la función f a ese valor y el siguiente de la secuencia, y así hasta que no quedan más elementos
en la lista. Devuelve el valor resultado de la última aplicación de la función f.
37
Manual de Python 5 FUNCIONES
En muchas aplicaciones es habitual aplicar una función o realizar una operación con los elementos de una co-
lección (lista, tupla o diccionario) y obtener una nueva colección de elementos transformados. Aunque esto se
puede hacer recorriendo la secuencia con un bucle iterativo, y en programación funcional mediante la función
map, Python incorpora un mecanismo muy potente que permite esto mismo de manera más simple.
Esta instrucción genera la lista cuyos elementos son el resultado de evaluar la expresión expresion, para ca-
da valor que toma la variable variable, donde variable toma todos los valores de la lista lista que cumplen la
condición condición.
Esta instrucción genera el diccionario formado por los pares cuyas claves son el resultado de evaluar la expre-
sión expresion-clave y cuyos valores son el resultado de evaluar la expresión expresion-valor, para cada valor
que toma la variable variable, donde variable toma todos los valores de la lista lista que cumplen la condición
condición.
38
Manual de Python 6 FICHEROS Y EXCEPCIONES
6 Ficheros y excepciones
6.1 Ficheros
Hasta ahora hemos visto como interactuar con un programa a través del teclado (entrada de datos) y la terminal
(salida), pero en la mayor parte de las aplicaciones reales tendremos que leer y escribir datos en ficheros.
Al utilizar ficheros para guardar los datos estos perdurarán tras la ejecución del programa, pudiendo ser con-
sultados o utilizados más tarde.
• Crear un fichero.
• Escribir datos en un fichero.
• Leer datos de un fichero.
• Borrar un fichero.
open(ruta, 'w') : Crea el fichero con la ruta ruta, lo abre en modo escritura (el argumento ‘w’ significa
write) y devuelve un objeto que lo referencia.
Si en lugar de crear un fichero nuevo queremos añadir datos a un fichero existente se debe utilizar la instruc-
ción
open(ruta, 'a') : Abre el fichero con la ruta ruta en modo añadir (el argumento ‘a’ significa append) y
devuelve un objeto que lo referencia.
Una vez abierto el fichero, se utiliza el método de escritura anterior y los datos se añaden al final del fichero.
39
Manual de Python 6 FICHEROS Y EXCEPCIONES
open(ruta, 'r') : Abre el fichero con la ruta ruta en modo lectura (el argumento ‘r’ significa read) y de-
vuelve un objeto que lo referencia.
Una vez abierto el fichero, se puede leer todo el contenido del fichero o se puede leer línea a línea.
fichero.read() : Devuelve todos los datos contenidos en fichero como una cadena de caracteres.
fichero.readlines() : Devuelve una lista de cadenas de caracteres donde cada cadena es una linea del
fichero referenciado por fichero.
Cuando se termina de trabajar con un fichero conviene cerrarlo, sobre todo si se abre en modo escritura, ya
que mientras está abierto en este modo no se puede abrir por otra aplicación. Si no se cierra explícitamente un
fichero, Python intentará cerrarlo cuando estime que ya no se va a usar más.
1 >>> f = open('bienvenida.txt'):
2 ... print(f.read())
3 ... f.close() # Cierre del fichero
4 ...
5 ¡Bienvenido a Python!
6 ¡Hasta pronto!
40
Manual de Python 6 FICHEROS Y EXCEPCIONES
Antes de borrar o renombra un directorio conviene comprobar que existe para que no se produzca un error. Para
ello se utiliza la función
os.path.isfile(ruta) : Devuelve True si existe un fichero en la ruta ruta y False en caso contrario.
1 >>> import os
2 >>> f = 'bienvenida.txt'
3 >>> if os.path.isfile(f):
4 ... os.rename(f, 'saludo.txt') # renombrado
5 ... else:
6 ... print('¡El fichero', f, 'no existe!')
7 ...
8 >>> f = 'saludo.txt'
9 >>> if os.path.isfile(f):
10 ... os.remove(f) # borrado
11 ... else:
12 ... print('¡El fichero', f, 'no existe!')
13 ...
Para trabajar con directorios también se utilizan funciones del módulo os.
os.listdir(ruta) : Devuelve una lista con los ficheros y directiorios contenidos en la ruta ruta.
Para leer un fichero de internet hay que utilizar la función urlopen del módulo urllib.request.
urlopen(url) : Abre el fichero con la url especificada y devuelve un objeto del tipo fichero al que se puede
acceder con los métodos de lectura de ficheros anteriores.
41
Manual de Python 6 FICHEROS Y EXCEPCIONES
Python utiliza un objeto especial llamado excepción para controlar cualquier error que pueda ocurrir durante
la ejecución de un programa.
Cuando ocurre un error durante la ejecución de un programa, Python crea una excepción. Si no se controla esta
excepción la ejecución del programa se detiene y se muestra el error (traceback).
• TypeError : Ocurre cuando se aplica una operación o función a un dato del tipo inapropiado.
• ZeroDivisionError : Ocurre cuando se itenta dividir por cero.
• OverflowError : Ocurre cuando un cálculo excede el límite para un tipo de dato numérico.
• IndexError : Ocurre cuando se intenta acceder a una secuencia con un índice que no existe.
• KeyError : Ocurre cuando se intenta acceder a un diccionario con una clave que no existe.
• FileNotFoundError : Ocurre cuando se intenta acceder a un fichero que no existe en la ruta indicada.
• ImportError : Ocurre cuando falla la importación de un módulo.
try - except - else Para evitar la interrución de la ejecución del programa cuando se produce un
error, es posible controlar la exepción que se genera con la siguiente instrucción:
try:
bloque código 1
except excepción:
bloque código 2
42
Manual de Python 7 LA LIBRERÍA NUMPY
else:
bloque código 3
Esta instrucción ejecuta el primer bloque de código y si se produce un error que genera una excepción del tipo
excepción entonces ejecuta el segundo bloque de código, mientras que si no se produce ningún error, se ejecuta
el tercer bloque de código.
1 >>> try:
2 ... f = open('fichero.txt') # El fichero no existe
3 ... except FileNotFoundError:
4 ... print('¡El fichero no existe!')
5 ... else:
6 ... print(f.read())
7 ¡El fichero no existe!
7 La librería Numpy
NumPy es una librería de Python especializada en el cálculo numérico y el análisis de datos, especialmente
para un gran volumen de datos.
Incorpora una nueva clase de objetos llamados arrays que permite representar colecciones de datos de un
mismo tipo en varias dimensiones, y funciones muy eficientes para su manipulación.
43
Manual de Python 7 LA LIBRERÍA NUMPY
Un array es una estructura de datos de un mismo tipo organizada en forma de tabla o cuadrícula de distintas
dimensiones.
Figura 2: Arrays
np.array(lista) : Crea un array a partir de la lista o tupla lista y devuelve una referencia a él. El número
de dimensiones del array dependerá de las listas o tuplas anidadas en lista:
• Para una lista de valores se crea un array de una dimensión, también conocido como vector.
• Para una lista de listas de valores se crea un array de dos dimensiones, también conocido como matriz.
• Para una lista de listas de listas de valores se crea un array de tres dimensiones, también conocido como
cubo.
• Y así sucesivamente. No hay límite en el número de dimensiones del array más allá de la memoria dispo-
nible en el sistema.
44
Manual de Python 7 LA LIBRERÍA NUMPY
np.empty(dimensiones) : Crea y devuelve una referencia a un array vacío con las dimensiones especifica-
das en la tupla dimensiones.
np.zeros(dimensiones) : Crea y devuelve una referencia a un array con las dimensiones especificadas en
la tupla dimensiones cuyos elementos son todos ceros.
np.ones(dimensiones) : Crea y devuelve una referencia a un array con las dimensiones especificadas en
la tupla dimensiones cuyos elementos son todos unos.
np.full(dimensiones, valor) : Crea y devuelve una referencia a un array con las dimensiones especi-
ficadas en la tupla dimensiones cuyos elementos son todos valor.
np.arange(inicio, fin, salto) : Crea y devuelve una referencia a un array de una dimensión cuyos
elementos son la secuencia desde inicio hasta fin tomando valores cada salto.
np.linspace(inicio, fin, n) : Crea y devuelve una referencia a un array de una dimensión cuyos ele-
mentos son la secuencia de n valores equidistantes desde inicio hasta fin.
np.random.random(dimensiones) : Crea y devuelve una referencia a un array con las dimensiones es-
pecificadas en la tupla dimensiones cuyos elementos son aleatorios.
1 >>> print(np.zeros(3,2))
2 [[0. 0. 0.]
3 [0. 0. 0.]]
4 >>> print(np.idendity(3))
5 [[1. 0. 0.]
6 [0. 1. 0.]
7 [0. 0. 1.]]
8 >>> print(np.arange(1, 10, 2))
9 [1 3 5 7 9]
10 >>> print(np.linspace(0, 10, 5))
11 [ 0. 2.5 5. 7.5 10. ]
45
Manual de Python 7 LA LIBRERÍA NUMPY
Para acceder a los elementos contenidos en un array se usan índices al igual que para acceder a los elementos
de una lista, pero indicando los índices de cada dimensión separados por comas.
También es posible obtener subarrays con el operador dos puntos : indicando el índice inicial y el siguiente al
final para cada dimensión, de nuevo separados por comas.
Una característica muy útil de los arrays es que es muy fácil obtener otro array con los elementos que cumplen
una condición.
a[condicion] : Devuelve una lista con los elementos del array a que cumplen la condición condicion.
Existen dos formas de realizar operaciones matemáticas con arrays: a nivel de elemento y a nivel de array.
46
Manual de Python 8 LA LIBRERÍA PANDAS
Las operaciones a nivel de elemento operan los elementos que ocupan la misma posición en dos arrays. Se ne-
cesitan, por tanto, dos arrays con las mismas dimensiones y el resultado es una array de la misma dimensión.
Los operadores mamemáticos +, -, *, /, %, ** se utilizan para la realizar suma, resta, producto, cociente, resto
y potencia a nivel de elemento.
a.dot(b) : Devuelve el array resultado del producto matricial de los arrays a y b siempre y cuando sus dimen-
siones sean compatibles.
8 La librería Pandas
47
Manual de Python 8 LA LIBRERÍA PANDAS
• Define nuevas estructuras de datos basadas en los arrays de la librería NumPy pero con nuevas funcio-
nalidades.
• Permite leer y escribir fácilmente ficheros en formato CSV, Excel y bases de datos SQL.
• Permite acceder a los datos mediante índices o nombres para filas y columnas.
• Ofrece métodos para reordenar, dividir y combinar conjuntos de datos.
• Permite trabajar con series temporales.
• Realiza todas estas operaciones de manera muy eficiente.
Estas estructuras se construyen a parir de arrays de la librería NumPy, añadiendo nuevas funcionalidades.
Son estructuras similares a los arrays de una dimensión. Son homogéneas, es decir, sus elementos tienen que
ser del mismo tipo, y su tamaño es inmutable, es decir, no se puede cambiar, aunque si su contenido.
Dispone de un índice que asocia un nombre a cada elemento del la serie, a través de la cuál se accede al ele-
mento.
48
Manual de Python 8 LA LIBRERÍA PANDAS
Existen varias propiedades o métodos para ver las características de una serie.
49
Manual de Python 8 LA LIBRERÍA PANDAS
• s.index : Devuelve una lista con los nombres de las filas del DataFrame s.
El acceso a los elementos de un objeto del tipo Series puede ser a través de posiciones o través de índices
(nombres).
Acceso por posición Se realiza de forma similar a como se accede a los elementos de un array.
1 >>> s[1:3]
2 Economía 4.5
3 Programación 8.5
4 dtype: float64
5 >>> s['Economía']
6 4.5
7 >>> s[['Programación', 'Matemáticas']]
8 Programación 8.5
9 Matemáticas 6.0
10 dtype: float64
50
Manual de Python 8 LA LIBRERÍA PANDAS
51
Manual de Python 8 LA LIBRERÍA PANDAS
34 4
35 >>> s.mean()
36 2.0
37 >>> s.std()
38 1.0540925533894598
39 >>> s.describe()
40 count 10.000000
41 mean 2.000000
42 std 1.054093
43 min 1.000000
44 25% 1.000000
45 50% 2.000000
46 75% 2.750000
47 max 4.000000
48 dtype: float64
Los operadores binarios (+, *, /, etc.) pueden utilizarse con una serie, y devuelven otra serie con el resultado
de aplicar la operación a cada elemento de la serie.
También es posible aplicar una función a cada elemento de la serie mediante el siguiente método:
• s.apply(f) : Devuelve una serie con el resultado de aplicar la función f a cada uno de los elementos
de la serie s.
52
Manual de Python 8 LA LIBRERÍA PANDAS
Los datos desconocidos representan en Pandas por NaN y los nulos por None. Tanto unos como otros suelen ser
un problema a la hora de realizar algunos análisis de datos, por lo que es habitual eliminarlos. Para eliminarlos
de una serie se utiliza el siguiente método:
Un objeto del tipo DataFrame define un conjunto de datos estructurado en forma de tabla donde cada columna
es un objeto de tipo Series, es decir, todos los datos de una misma columna son del mismo tipo, y las filas son
registros que pueden contender datos de distintos tipos.
53
Manual de Python 8 LA LIBRERÍA PANDAS
Un DataFrame contiene dos índices, uno para las filas y otro para las columnas, y se puede acceder a sus ele-
mentos mediante los nombres de las filas y las columnas.
Ejemplo. El siguiente DataFrame contiene información sobre los alumnos de un curso. Cada fila corresponde
a un alumno y cada columna a una variable.
Para crear un DataFrame a partir de un diccionario cuyas claves son los nombres de las columnas y los valores
son listas con los datos de las columnas se utiliza el método:
Los valores asociados a las claves del diccionario deben ser listas del mismo tamaño.
1 >>>
import pandas as pd
2 >>>
datos = {'nombre':['María', 'Luis', 'Carmen', 'Antonio'],
3 ...
'edad':[18, 22, 20, 21],
4 ...
'grado':['Economía', 'Medicina', 'Arquitectura', 'Economía'],
5 ...
'correo':['maria@gmail.com', 'luis@yahoo.es', 'carmen@gmail.com', '
antonio@gmail.com']
6 ... }
7 >>> df = pd.DataFrame(datos)
54
Manual de Python 8 LA LIBRERÍA PANDAS
8 >>> print(df)
9 nombre edad grado correo
10 0 María 18 Economía maria@gmail.com
11 1 Luis 22 Medicina luis@yahoo.es
12 2 Carmen 20 Arquitectura carmen@gmail.com
13 3 Antonio 21 Economía antonio@gmail.com
Para crear un DataFrame a partir de una lista de listas con los datos de las columnas se utiliza el siguiente mé-
todo:
Si las listas anidadas en listas no tienen el mismo tamaño, las listas menores se rellenan con valores NaN.
Para crear un DataFrame a partir de una lista de diccionarios con los datos de las filas, se utiliza el siguiente
método:
Si los diccionarios no tienen las mismas claves, las claves que no aparecen en el diccionario se rellenan con
valores NaN.
55
Manual de Python 8 LA LIBRERÍA PANDAS
Dependiendo del tipo de fichero, existen distintas funciones para importar un DataFrame desde un fichero.
56
Manual de Python 8 LA LIBRERÍA PANDAS
de columnas se utiliza los valores de la fila n y como nombres de filas los valores de la columna m. Si
no se indica m se utilizan como nombres de filas los enteros empezando en 0. Los valores incluídos en
la lista no-validos se convierten en NaN. Para los datos numéricos se utiliza como separador de
decimales el carácter indicado en separador-decimal.
También existen funciones para exportar un DataFrame a un fichero con diferentes formatos.
• df.info() : Devuelve información (número de filas, número de columnas, índices, tipo de las colum-
nas y memoria usado) sobre el DataFrame df.
57
Manual de Python 8 LA LIBRERÍA PANDAS
• df.shape : Devuelve una tupla con el número de filas y columnas del DataFrame df.
• df.columns : Devuelve una lista con los nombres de las columnas del DataFrame df.
• df.index : Devuelve una lista con los nombres de las filas del DataFrame df.
• df.dtypes : Devuelve una serie con los tipos de datos de las columnas del DataFrame df.
58
Manual de Python 8 LA LIBRERÍA PANDAS
Para cambiar el nombre de las filas y las columnas de un DataFrame se utiliza el siguiente método:
Para reordenar los índices de las filas y las columnas de un DataFrame, así como añadir o eliminar índices, se
utiliza el siguiente método:
59
Manual de Python 8 LA LIBRERÍA PANDAS
El acceso a los datos de un DataFrame se puede hacer a través de posiciones o través de los nombres de las filas
y columnas.
• df.iloc[i, j] : Devuelve el elemento que se encuentra en la fila i y la columna j del DataFrame df.
Pueden indicarse secuencias de índices para obtener partes del DataFrame.
• df.iloc[filas, columnas] : Devuelve un DataFrame con los elementos de las filas de la lista
filas y de las columnas de la lista columnas.
• df.iloc[i] : Devuelve una serie con los elementos de la fila i del DataFrame df.
• df.loc[fila, columna] : Devuelve el elemento que se encuentra en la fila con nombre fila y la
columna de con nombre columna del DataFrame df.
df.loc[filas, columnas] : Devuelve un DataFrame con los elemento que se encuentra en las filas con
los nombres de la lista filas y las columnas con los nombres de la lista columnas del DataFrame df.
• df[columna] : Devuelve una serie con los elementos de la columna de nombre columna del DataFra-
me df.
• df.columna : Devuelve una serie con los elementos de la columna de nombre columna del DataFrame
df. Es similar al método anterior pero solo funciona cuando el nombre de la columna no tiene espacios
en blanco.
60
Manual de Python 8 LA LIBRERÍA PANDAS
3 'https://raw.githubusercontent.com/asalber/manual-python/master/datos/
colesterol.csv')
4 >>> print(df.loc[2, 'colesterol'])
5 191
6 >>> print(df.loc[:3, ('colesterol','peso')])
7 colesterol peso
8 1 232.0 65.0
9 2 191.0 NaN
10 3 200.0 65.0
11 >>> print(df['colesterol'])
12 0 182.0
13 1 232.0
14 2 191.0
15 3 200.0
16 ...
Una operación bastante común con un DataFrame es obtener las filas que cumplen una determinada condi-
ción.
• df[condicion] : Devuelve un DataFrame con las filas del DataFrame df que se corresponden con el
valor True de la lista booleana condicion. condicion debe ser una lista de valores booleanos de la
misma longitud que el número de filas del DataFrame.
El procedimiento para añadir una nueva columna a un DataFrame es similar al de añadir un nuevo par aun
diccionario, pero pasando los valores de la columna en una lista o serie.
• d[nombre] = lista: Añade al DataFrame df una nueva columna con el nombre nombre y los valo-
res de la lista lista. La lista debe tener el mismo tamaño que el número de filas de df.
• d[nombre] = serie: Añade al DataFrame df una nueva columna con el nombre nombre y los va-
lores de la serie serie. Si el tamaño de la serie es menor que el número de filas de df se rellena con
valores NaN mientras que si es mayor se recorta.
61
Manual de Python 8 LA LIBRERÍA PANDAS
Puesto que los datos de una misma columna de un DataFrame son del mismo tipo, es fácil aplicar la misma
operación a todos los elementos de la columna.
Para aplicar funciones a todos los elementos de una columna se utiliza el siguiente método:
62
Manual de Python 8 LA LIBRERÍA PANDAS
• df[columna].apply(f) : Devuelve una serie con los valores que resulta de aplicar la función f a los
elementos de la columna con nombre columna del DataFrame df.
Al igual que para las series, los siguientes métodos permiten resumir la información de un DataFrame por co-
lumnas:
• df.count() : Devuelve una serie número de elementos que no son nulos ni NaN en cada columna del
DataFrame df.
• df.sum() : Devuelve una serie con la suma de los datos de las columnas del DataFrame df cuando los
datos son de un tipo numérico, o la concatenación de ellos cuando son del tipo cadena str.
• df.cumsum() : Devuelve un DataFrame con la suma acumulada de los datos de las columnas del Data-
Frame df cuando los datos son de un tipo numérico.
• df.min() : Devuelve una serie con los menores de los datos de las columnas del DataFrame df.
• df.max() : Devuelve una serie con los mayores de los datos de las columnas del DataFrame df.
• df.mean() : Devuelve una serie con las media de los datos de las columnas del DataFrame df cuando
los datos son de un tipo numérico.
• df.std() : Devuelve una serie con las desviaciones típicas de los datos de las columnas del DataFrame
df cuando los datos son de un tipo numérico.
• df.describe(include = tipo) : Devuelve un DataFrame con un resumen estadístico de las co-
lumnas del DataFrame df del tipo tipo. Para los datos numéricos (number) se calcula la media, la
desviación típica, el mínimo, el máximo y los cuartiles de las columnas numéricas. Para los datos no
numéricos (object) se calcula el número de valores, el número de valores distintos, la moda y su fre-
cuencia. Si no se indica el tipo solo se consideran las columnas numéricas.
63
Manual de Python 8 LA LIBRERÍA PANDAS
• del d[nombre] : Elimina la columna con nombre nombre del DataFrame df.
• df.pop(nombre) : Elimina la columna con nombre nombre del DataFrame df y la devuelve como
una serie.
64
Manual de Python 8 LA LIBRERÍA PANDAS
• df.drop(filas) : Devuelve el DataFrame que resulta de eliminar las filas con los nombres indicados
en la lista filas del DataFrame df.
65
Manual de Python 8 LA LIBRERÍA PANDAS
Para ordenar un DataFrame de acuerdo a los valores de una determinada columna se utilizan los siguientes
métodos:
Para eliminar las filas de un DataFrame que contienen datos desconocidos NaN o nulos None se utiliza el si-
guiente método:
• s.dropna(subset=columnas) : Devuelve el DataFrame que resulta de eliminar las filas que contie-
nen algún dato desconocido o nulo en las columnas de la lista columna del DataFrame df. Si no se pasa
un argumento al parámetro subset se aplica a todas las columnas del DataFrame.
66
Manual de Python 8 LA LIBRERÍA PANDAS
En muchas aplicaciones es útil agrupar los datos de un DataFrame de acuerdo a los valores de una o varias
columnas (categorías), como por ejemplo el sexo o el país.
• df.groupby(columnas).groups : Devuelve un diccionario con cuyas claves son las tuplas que re-
sultan de todas las combinaciones de los valores de las columnas con nombres en la lista columnas, y
valores las listas de los nombres de las filas que contienen esos valores en las correspondientes columnas
del DataFrame df.
67
Manual de Python 8 LA LIBRERÍA PANDAS
Una vez dividido el DataFame en grupos, es posible aplicar funciones de agregación a cada grupo mediante el
siguiente método:
68
Manual de Python 8 LA LIBRERÍA PANDAS
Una función de agregación toma como argumento una lista y devuelve una único valor. Algunas de las funciones
de agregación más comunes son:
69
Manual de Python 8 LA LIBRERÍA PANDAS
Para convertir un DataFrame de formato ancho a formato largo (columnas a filas) se utiliza el siguiente méto-
do:
Para convertir un DataFrame de formato largo a formato ancho (filas a columnas) se utiliza el siguiente méto-
do:
70
Manual de Python 9 LA LIBRERÍA MATPLOTLIB
9 La librería Matplotlib
Permite crear y personalizar los tipos de gráficos más comunes, entre ellos:
• Diagramas de barras
• Histograma
• Diagramas de sectores
• Diagramas de caja y bigotes
• Diagramas de violín
• Diagramas de dispersión o puntos
• Diagramas de lineas
• Diagramas de areas
• Diagramas de contorno
• Mapas de color
Para crear un gráfico con matplotlib es habitual seguir los siguientes pasos:
71
Manual de Python 9 LA LIBRERÍA MATPLOTLIB
2. Definir la figura que contendrá el gráfico, que es la region (ventana o página) donde se dibujará. Para ello
se utiliza la función figure().
3. Definir los ejes sobre los que se dibujarán los datos. Para ello se utiliza la función add_axes() o bien
add_subplot().
4. Dibujar los datos sobre los ejes. Para ello se utilizan distintas funciones dependiendo del tipo de gráfico
que se quiera.
5. Personalizar el gráfico. Para ello existen multitud de funciones que permiten añadir un título, una leyen-
da, una rejilla, cambiar colores o personalizar los ejes.
72
Manual de Python 9 LA LIBRERÍA MATPLOTLIB
• scatter(x, y): Dibuja un diagrama de puntos con las coordenadas de la lista x en el eje X y las coor-
denadas de la lista y en el eje Y.
73
Manual de Python 9 LA LIBRERÍA MATPLOTLIB
• plot(x, y): Dibuja un polígono con los vértices dados por las coordenadas de la lista x en el eje X y
las coordenadas de la lista y en el eje Y.
74
Manual de Python 9 LA LIBRERÍA MATPLOTLIB
• fill_between(x, y): Dibuja el area bajo el polígono con los vértices dados por las coordenadas de
la lista x en el eje X y las coordenadas de la lista y en el eje Y.
75
Manual de Python 9 LA LIBRERÍA MATPLOTLIB
• bar(x, y): Dibuja un diagrama de barras verticales donde x es una lista con la posición de las barras
en el eje X, e y es una lista con la altura de las barras en el eje Y.
76
Manual de Python 9 LA LIBRERÍA MATPLOTLIB
• barh(x, y): Dibuja un diagrama de barras horizontales donde x es una lista con la posición de las
barras en el eje Y, y x es una lista con la longitud de las barras en el eje X.
77
Manual de Python 9 LA LIBRERÍA MATPLOTLIB
9.1.8 Histogramas
• hist(x, bins): Dibuja un histograma con las frecuencias resultantes de agrupar los datos de la lista
x en las clases definidas por la lista bins.
1 import numpy as np
2 import matplotlib.pyplot as plt
3 fig = plt.figure()
4 ax = fig.add_subplot(111)
5 x = np.random.normal(5, 1.5, size=1000)
6 ax.hist(x, np.arange(0, 11))
7 plt.savefig('histograma.png')
8 plt.show()
78
Manual de Python 9 LA LIBRERÍA MATPLOTLIB
79
Manual de Python 9 LA LIBRERÍA MATPLOTLIB
80
Manual de Python 9 LA LIBRERÍA MATPLOTLIB
81
Manual de Python 9 LA LIBRERÍA MATPLOTLIB
• contourf(x, y, z): Dibuja un diagrama de contorno con las curvas de nivel de la superficie dada
por los puntos con las coordenadas de las listas x, y y z en los ejes X, Y y Z respectivamente.
82
Manual de Python 9 LA LIBRERÍA MATPLOTLIB
83
Manual de Python 9 LA LIBRERÍA MATPLOTLIB
• hist2d(x, y): Dibuja un mapa de color que simula un histograma bidimensional, donde los colores
de los cuadrados dependen de las frecuencias de las clases de la muestra dada por las listas x e y.
84
Manual de Python 10 APÉNDICE: DEPURACIÓN DE CÓDIGO
La depuración es una técnica que permite trazar un programa, es decir, seguir el flujo de ejecución de un pro-
grama paso a paso, ejecutando una instrucción en cada paso, y observar el estado de sus variables.
Cuando un programa tiene cierta complejidad, la depuración es imprescindible pare detectar posibles erro-
res.
Python dispone del módulo pyd para depurar programas, pero es mucho más cómodo utilizar algún entorno
de desarrollo que incorpore la depuración, como por ejemplo Visual Studio Code.
• Establecer punto de parada: Detiene la ejecución del programa en una línea concreta de código.
85
Manual de Python 10 APÉNDICE: DEPURACIÓN DE CÓDIGO
• Continuar la ejecución: Continúa la ejecución del programa hasta el siguiente punto de parada o hasta
que finalice.
• Próximo paso: Ejecuta la siguiente línea de código y para la ejecución.
• Próximo paso con entrada en función: Ejecuta la siguiente línea de código. Si se trata de una llamada
a una función entonces ejecuta la primera instrucción de la función y para la ejecución.
• Próximo paso con salida de función: Ejecuta lo que queda de la función actual y para la ejecución.
• Terminar la depuración: Termina la depuración.
Antes de iniciar la depuración de un programa en VSCode hay que establecer algún punto de parada. Para ello
basta con hacer click en le margen izquierdo de la ventana con del código a la altura de la línea donde se quiere
parar la ejecución del programa.
>
Para iniciar la depuración de un programa en VSCode hay que hacer clic sobre el botón o pulsar la com-
binación de teclas (Ctr+Shift+D).
La primera vez que depuremos un programa tendremos que crear un fichero de configuración del depurador
(launch.json). Para ello hay que hacer clic en el botón Run and Debug. VSCode mostrará los distintos
ficheros de configuración disponibles y debe seleccionarse el más adecuado para el tipo de programa a depurar.
Para programas simples se debe seleccionar Python file.
La depuración comenzará iniciando la ejecución del programa desde el inicio hasta el primer punto de parada
que encuentre.
Una vez iniciado el proceso de depuración, se puede avanzar en la ejecución del programa haciendo uso de la
barra de depuración que contiene botones con los principales comandos de depuración.
86
Manual de Python 10 APÉNDICE: DEPURACIÓN DE CÓDIGO
Durante la ejecución del programa, se puede ver el contenido de las variables del programa en la ventana del
estado de las variables.
El usuario también puede introducir expresiones y ver cómo se evalúan durante la ejecución del programa en
la ventana de vista de expresiones.
87
Manual de Python 10 APÉNDICE: DEPURACIÓN DE CÓDIGO
# Bibliografía
10.2 Referencias
Webs:
Libros y manuales:
88
Manual de Python 10 APÉNDICE: DEPURACIÓN DE CÓDIGO
• Learning Python Libro de introducción a Python con enfoque de programación orientada a objetos.
Vídeos:
89