Bienvenidos al primer video de este módulo, en el que vamos a empezar a trabajar con la librería Pandas. Lo primero que haremos será estudiar algo llamado series, que son la forma básica en la que Pandas estructura la información que luego se va a procesar y visualizar. Al final de este video, entenderemos lo que representa una serie en Pandas, entenderemos a qué se refiere el índice de una serie y seremos capaces de construir nuevas series a partir de estructuras de datos sencillas. Empecemos con un ejemplo, para definir qué es una serie en Pandas. En la imagen, vemos un conjunto de datos que corresponden a las temperaturas máximas en Bogotá para nueve días. Estos registros están ordenados de acuerdo a algún criterio que no conocemos en este momento. Tienen todos el mismo tipo y hay un nombre que los describe: "Temperaturas en Bogotá". Para hacer una serie en Pandas, estos datos solo necesitan una cosa adicional: un índice. En esta nueva imagen, ya le agregamos el índice más sencillo posible a nuestros datos, una columna adicional donde aparece la posición en la que se encuentra cada registro. Cada uno de los valores que aparecen en esta columna lo llamaremos una etiqueta, así que nos podremos hacer preguntas como, ¿cuál es la temperatura asociada a la etiqueta cuatro?, o, ¿para qué etiquetas el valor de la temperatura era 20 grados? Es importante anotar que si bien en el dibujo el índice se ve como una columna adicional, estrictamente hablando, no es una columna, sino un conjunto de etiquetas aparte. Es decir, en una serie siempre tenemos un índice con etiquetas y un conjunto de valores, que es la información que queremos almacenar en la serie. Si quisiéramos tener más columnas, por ejemplo, para representar la temperatura máxima y la mínima, tendríamos que usar "data frames", pero de eso nos ocuparemos más adelante. Finalmente, acá volvemos a tener nuestra serie, pero esta vez el índice está formado por etiquetas que tienen la fecha a la que corresponde la temperatura. Esto nos sirve para mostrar que los índices pueden ser de cualquier tipo y que una serie, usualmente, tiene un solo índice. En este ejemplo, y en la mayoría de los que veremos en este curso, las etiquetas no se repiten. Esta es una buena práctica que facilita los análisis, pero donde está prohibido que haya etiquetas repetidas. Tenga cuidado y tenga esto en mente por si se encuentra en esta situación en el futuro. Veamos ahora cómo podemos construir con Pandas una serie como la del ejemplo. En primer lugar, veamos la instrucción para importar el módulo Pandas que usaremos en todos nuestros ejemplos: "import pandas as pd". Es decir, que de ahora en adelante usaremos "pd" como el alias para el módulo. Ahora sí, empecemos a construir nuestra serie. Y para esto usaremos una lista llamada "datos", donde pondremos los valores que tenemos en la serie. A continuación, usaremos el constructor de una serie, es decir, "pd.Series" y tendremos dos parámetros. El primero serán los datos que queremos tener en la serie y el segundo será el parámetro nombrado "name", con el que vamos a especificar el nombre que le queremos dar a la serie. El resultado de esta invocación, lo vamos a guardar en la variable llamada "temperaturas". Como vemos abajo, el resultado de esta operación es una serie que tienen los datos que especificamos. También podemos ver que cuando imprimimos la serie, en la parte de abajo aparece el nombre que le dimos cuando la creamos y aparece el tipo de los datos, aunque nosotros no se los hayamos especificado. Pandas se encarga de inferir el mejor tipo, según lo que haya encontrado en los datos y en este caso se trata de "int64", que es el tipo que usa NumPy para representar números enteros y es perfectamente compatible con el tipo "int" de Python. Usando la función "type" de Python podemos comprobar los tipos de todos los que estamos hablando. Primero, si consultamos el tipo de la variable "temperatura", veremos que es del tipo "pandas.core.series.Series.", que es el nombre completo del tipo de Pandas. A eso, de ahora en adelante, lo llamaremos simplemente una serie. Luego, tenemos una consulta sobre el tipo de "temperaturas.values". Preguntarle a una serie por su atributo ".values" es equivalente a preguntar por la columna que contienen los valores. Al invocar la función "type" sobre estos valores, vemos que la columna es de tipo "numpy.ndarray". Es decir, los valores de una serie se almacenan dentro de una estructura de datos de tipo "ndarray" de NumPy, que como vimos, es mucho más eficiente que una lista de Python. Finalmente, como los valores se están almacenando en un arreglo en NumPy, tienen que ser de alguno de los tipos de NumPy, que en este caso es "int64". Para terminar la construcción de nuestra primera serie, veamos que el índice también aparece en la imagen que estamos viendo. En este caso, Pandas decidió asignarle un índice a la serie basado en las posiciones de los datos. De esta manera, el dato 19 quedó con la etiqueta cero, el dato 18 con la etiqueta uno, el dato 29 con la etiqueta dos y así sucesivamente. Este es el comportamiento por defecto de Pandas cuando no se especifica un índice, pero puede modificarse con facilidad, como veremos a continuación. En este caso, volvemos a tener una lista con los datos, pero también tenemos una lista llamada "fechas", en la cual tenemos las fechas a las que corresponden los registros. Luego, cuando creamos la nueva serie, usamos el parámetro adicional llamado "index", al cual le asignamos la lista de fechas. El resultado es que ahora nuestra serie va a tener estos valores como índice y para acceder a los diferentes registros vamos a poder usar tanto la posición en la que se encuentren, como el valor de la etiqueta que les corresponde. Otra forma de construir nuevas series es a partir de diccionarios, como en el ejemplo que estamos viendo. Cuando lo hacemos así, Pandas utiliza las llaves del diccionario como etiquetas y los valores del diccionario como los valores de la serie. En el caso de la imagen, el resultado que obtenemos es prácticamente igual al que teníamos antes. La única diferencia es que como no especificamos el parámetro "name", la serie no tiene nombre. Finalmente, veamos cómo reconstruir el índice de una serie usando la función "reset_index". Esta es una operación muy sencilla y muy poderosa, que le será de utilidad cuando cambie la estructura o el orden de una serie. En resumen, lo que hace la función es eliminar el índice anterior y asignarle nuevas etiquetas a todos los registros, usando las posiciones que tengan en ese momento. Como en este caso no hemos alterado todavía el orden de los registros en la serie, el resultado que obtenemos es exactamente el mismo que teníamos al inicio, cuando no estábamos usando las fechas. Como vemos, los datos se mantienen en el mismo orden y solo cambia el índice. Sin embargo, es importantísimo que incluyamos en la invocación el parámetro "drop" con el valor "True". Si no lo hacemos, Pandas tomará el viejo índice y lo convertirá en una columna adicional, transformando así la serie en un "data frame" con dos columnas. Este es un buen momento para detenernos y resolver una pregunta. Con esto concluimos el primer video sobre Pandas, en el que introducimos las series; probablemente hasta el momento no sea fácil imaginarse todo el poder que pueden tener, pero créanos, toda la librería Pandas está construida sobre este concepto. Los "data frame" son conjuntos de serie, las funciones de análisis y estadísticas producen series con sus resultados y hasta las visualizaciones tienen representaciones internas basadas en series. Asegúrese entonces de entender bien el uso de las series en este y en los siguientes videos, antes de seguir adelante.