{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<p>\n",
    "<font size='5' face='Georgia, Arial'>IIC2233 Apunte Programación Avanzada</font><br>\n",
    "<font size='1'>&copy; 2024 Francisca Cattan.</font>\n",
    "<br>\n",
    "<font size='1'> Modificado 2026-1 por Equipo Docente IIC2233</font>\n",
    "</p>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Tabla de contenidos\n",
    "\n",
    "1. [Análisis de datos con Pandas](#Análisis-de-datos-con-Pandas)\n",
    "2. [Manipulación de DataFrames](#Manipulación-de-DataFrames)\n",
    "    1. [Explorando el DataFrame](#Explorando-el-DataFrame)\n",
    "    2. [Filtrado y selección de datos](#Filtrado-y-selección-de-datos)\n",
    "3. [Modificación de estructura y datos](#Modificación-de-estructura-y-datos)\n",
    "    1. [Visualización usando matplotlib](#Visualización-usando-matplotlib)\n",
    "4. [Combinación de varios DataFrames](#Combinación-de-varios-Dataframes)\n",
    "5. [Guardar y abrir datos como CSV](#Guardar-y-abrir-datos-como-CSV)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "TA6_NdF3GdRX"
   },
   "source": [
    "# Análisis de datos con Pandas\n",
    "\n",
    "Nos adentraremos brevemente en el análisis de datos, utilizando la librería `Pandas`. Para mayor profundización luego de esta introducción, [recomendamos la documentación de `Pandas`](https://pandas.pydata.org/docs/index.html).\n",
    "\n",
    "**¿Por qué Pandas?**\n",
    "\n",
    "En el ámbito del análisis y la manipulación de datos, la capacidad de manejar grandes conjuntos de datos de manera eficiente y efectiva es crucial. `Pandas` es una biblioteca de Python esencial que proporciona estructuras de datos y herramientas de alto rendimiento diseñadas específicamente para facilitar estas tareas. A continuación nombraremos algunas ventajas de aprender esta herramienta.\n",
    "\n",
    "- Estructuras de datos poderosas: Ofrece dos estructuras principales: *Series* (arreglos unidimensionales etiquetados) y *DataFrames* (estructuras bidimensionales similares a tablas de bases de datos o hojas de cálculo de Excel).\n",
    "\n",
    "- Manipulación y limpieza de datos: Facilita operaciones como filtrado, selección, transformación y agregación de datos, lo que simplifica el proceso de preparación de datos para análisis posteriores.\n",
    "\n",
    "- Soporte para múltiples formatos de datos: Permite leer y escribir datos en diversos formatos, como CSV, Excel, SQL, JSON, entre otros, facilitando la integración con diferentes fuentes de datos.\n",
    "\n",
    "- Integración con otras bibliotecas: Se integra con bibliotecas como `NumPy`, `Matplotlib` (para visualizar datos) y `scikit-learn` (para realizar predicciones sobre los datos).\n",
    "\n",
    "Es importante destacar que **`Pandas` está construido sobre `NumPy`**. Esto significa que utiliza arrays de `NumPy` internamente para almacenar y manipular los datos. Gracias a esta base, `¡¡¡Pandas` hereda muchas de las ventajas de `NumPy`!!!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Antes de empezar...\n",
    "\n",
    "Es necesario instalar las librerías que utilizaremos en este _notebook_, para esto debes correr los siguientes comandos en tu terminal:\n",
    "```bash\n",
    "python3 -m pip install pandas\n",
    "python3 -m pip install matplotlib\n",
    "```\n",
    "Recuerda que si `python3` no funciona, probar con `python`, `py` o `py3`.\n",
    "\n",
    "Al ejecutar los comandos `pip install` verás como se cargan las librerías necesarias o te informará que todo está en orden si es que ya cuentas con `Pandas` y `Matplotlib`."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ¡Empecemos!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "IxeNCBZ_GdRa"
   },
   "source": [
    "Para empezar debemos importar `pandas`, y lo haremos usando el alias `pd`. Al igual que en NumPy, este es un alias ampliamente usado."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "XwaiyLYzz8Sa"
   },
   "source": [
    "# Manipulación de DataFrames\n",
    "\n",
    "Para comenzar, vamos a crear un _DataFrame_ con información sobre algunas películas de Disney. Un **_DataFrame_** es una estructura de datos bidimensional similar a una hoja de cálculo o una tabla de SQL (contenido más avanzado).\n",
    "\n",
    "**Datos de Ejemplo**\n",
    "* Título: Nombre de la película.\n",
    "* Año: Año de lanzamiento.\n",
    "* Género: Género principal de la película.\n",
    "* Duración: Duración de la película en minutos.\n",
    "* Calificación: Calificación promedio en IMDb."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "datos_peliculas = {\n",
    "    'Título': ['Frozen', 'Toy Story', 'The Lion King', 'Moana', 'Coco'],\n",
    "    'Año': [2013, 1995, 1994, 2016, 2017],\n",
    "    'Género': ['Animación', 'Animación', 'Animación', 'Animación', 'Animación'],\n",
    "    'Duración': [102, 81, 88, 107, 105],\n",
    "    'Calificación': [7.4, 8.3, 8.5, 7.6, 8.4]\n",
    "}\n",
    "\n",
    "df_peliculas = pd.DataFrame(datos_peliculas)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "59wPZQXMoPuc"
   },
   "source": [
    "Visualicemos este _DataFrame_ recién creado."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 204
    },
    "id": "MTpaJJpCxQVv",
    "outputId": "1053da98-d237-46bf-9822-c29b2496404d"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Título</th>\n",
       "      <th>Año</th>\n",
       "      <th>Género</th>\n",
       "      <th>Duración</th>\n",
       "      <th>Calificación</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Frozen</td>\n",
       "      <td>2013</td>\n",
       "      <td>Animación</td>\n",
       "      <td>102</td>\n",
       "      <td>7.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Toy Story</td>\n",
       "      <td>1995</td>\n",
       "      <td>Animación</td>\n",
       "      <td>81</td>\n",
       "      <td>8.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>The Lion King</td>\n",
       "      <td>1994</td>\n",
       "      <td>Animación</td>\n",
       "      <td>88</td>\n",
       "      <td>8.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Moana</td>\n",
       "      <td>2016</td>\n",
       "      <td>Animación</td>\n",
       "      <td>107</td>\n",
       "      <td>7.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Coco</td>\n",
       "      <td>2017</td>\n",
       "      <td>Animación</td>\n",
       "      <td>105</td>\n",
       "      <td>8.4</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          Título   Año     Género  Duración  Calificación\n",
       "0         Frozen  2013  Animación       102           7.4\n",
       "1      Toy Story  1995  Animación        81           8.3\n",
       "2  The Lion King  1994  Animación        88           8.5\n",
       "3          Moana  2016  Animación       107           7.6\n",
       "4           Coco  2017  Animación       105           8.4"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_peliculas"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Explorando el DataFrame"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "Podemos obtener información general sobre el _DataFrame_ utilizando el método `.info()`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 5 entries, 0 to 4\n",
      "Data columns (total 5 columns):\n",
      " #   Column        Non-Null Count  Dtype  \n",
      "---  ------        --------------  -----  \n",
      " 0   Título        5 non-null      object \n",
      " 1   Año           5 non-null      int64  \n",
      " 2   Género        5 non-null      object \n",
      " 3   Duración      5 non-null      int64  \n",
      " 4   Calificación  5 non-null      float64\n",
      "dtypes: float64(1), int64(2), object(2)\n",
      "memory usage: 332.0+ bytes\n"
     ]
    }
   ],
   "source": [
    "df_peliculas.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Muchas veces tenemos una cantidad enorme de datos, del orden de miles o millones. Para obtener una previsualizacion rapida podemos usar la funcion `.head` y ver las top 5 (por defecto) filas del dataset."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Título</th>\n",
       "      <th>Año</th>\n",
       "      <th>Género</th>\n",
       "      <th>Duración</th>\n",
       "      <th>Calificación</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Frozen</td>\n",
       "      <td>2013</td>\n",
       "      <td>Animación</td>\n",
       "      <td>102</td>\n",
       "      <td>7.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Toy Story</td>\n",
       "      <td>1995</td>\n",
       "      <td>Animación</td>\n",
       "      <td>81</td>\n",
       "      <td>8.3</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Título   Año     Género  Duración  Calificación\n",
       "0     Frozen  2013  Animación       102           7.4\n",
       "1  Toy Story  1995  Animación        81           8.3"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Veremos las primeras dos\n",
    "df_peliculas.head(2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Para obtener algunas estadísticas descriptivas básicas de las columnas numéricas, podemos usar `.describe()` para datos discretos o `.value_counts` para datos categoricos."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Año</th>\n",
       "      <th>Duración</th>\n",
       "      <th>Calificación</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>5.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>5.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>2007.000000</td>\n",
       "      <td>96.600000</td>\n",
       "      <td>8.040000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>11.510864</td>\n",
       "      <td>11.458621</td>\n",
       "      <td>0.502991</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1994.000000</td>\n",
       "      <td>81.000000</td>\n",
       "      <td>7.400000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>1995.000000</td>\n",
       "      <td>88.000000</td>\n",
       "      <td>7.600000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>2013.000000</td>\n",
       "      <td>102.000000</td>\n",
       "      <td>8.300000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>2016.000000</td>\n",
       "      <td>105.000000</td>\n",
       "      <td>8.400000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>2017.000000</td>\n",
       "      <td>107.000000</td>\n",
       "      <td>8.500000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "               Año    Duración  Calificación\n",
       "count     5.000000    5.000000      5.000000\n",
       "mean   2007.000000   96.600000      8.040000\n",
       "std      11.510864   11.458621      0.502991\n",
       "min    1994.000000   81.000000      7.400000\n",
       "25%    1995.000000   88.000000      7.600000\n",
       "50%    2013.000000  102.000000      8.300000\n",
       "75%    2016.000000  105.000000      8.400000\n",
       "max    2017.000000  107.000000      8.500000"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_peliculas.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Título         Año   Género     Duración  Calificación\n",
       "Coco           2017  Animación  105       8.4             1\n",
       "Frozen         2013  Animación  102       7.4             1\n",
       "Moana          2016  Animación  107       7.6             1\n",
       "The Lion King  1994  Animación  88        8.5             1\n",
       "Toy Story      1995  Animación  81        8.3             1\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_peliculas.value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Podemos acceder a una **columna** específica utilizando su nombre, muy similar a lo que vimos en diccionarios."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0           Frozen\n",
       "1        Toy Story\n",
       "2    The Lion King\n",
       "3            Moana\n",
       "4             Coco\n",
       "Name: Título, dtype: object"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_peliculas['Título']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Para examinar **filas** y **columnas** específicas de un _DataFrame_, `Pandas` proporciona los métodos `iloc` y `loc`: \n",
    "- `iloc` se usa cuando quieres especificar una lista o rango de índices.\n",
    "- `.loc` se usa cuando quieres especificar una lista o rango de etiquetas (o labels).\n",
    "\n",
    "Para ambos métodos, debe especificar dos elementos, con el primer elemento que indica las filas que desea seleccionar y el segundo elemento que indica las columnas que desea seleccionar."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Título             Frozen\n",
       "Año                  2013\n",
       "Género          Animación\n",
       "Duración              102\n",
       "Calificación          7.4\n",
       "Name: 0, dtype: object"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Usaremos el índice 0 que referencia la primera fila.\n",
    "df_peliculas.iloc[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Título</th>\n",
       "      <th>Año</th>\n",
       "      <th>Género</th>\n",
       "      <th>Duración</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Frozen</td>\n",
       "      <td>2013</td>\n",
       "      <td>Animación</td>\n",
       "      <td>102</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Toy Story</td>\n",
       "      <td>1995</td>\n",
       "      <td>Animación</td>\n",
       "      <td>81</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Título   Año     Género  Duración\n",
       "0     Frozen  2013  Animación       102\n",
       "1  Toy Story  1995  Animación        81"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Accedemos a los datos por la posición:\n",
    "# las primeras 2 filas y las primeras 4 columnas\n",
    "df_peliculas.iloc[:2, :4]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Título</th>\n",
       "      <th>Año</th>\n",
       "      <th>Género</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Frozen</td>\n",
       "      <td>2013</td>\n",
       "      <td>Animación</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Toy Story</td>\n",
       "      <td>1995</td>\n",
       "      <td>Animación</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>The Lion King</td>\n",
       "      <td>1994</td>\n",
       "      <td>Animación</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Moana</td>\n",
       "      <td>2016</td>\n",
       "      <td>Animación</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Coco</td>\n",
       "      <td>2017</td>\n",
       "      <td>Animación</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          Título   Año     Género\n",
       "0         Frozen  2013  Animación\n",
       "1      Toy Story  1995  Animación\n",
       "2  The Lion King  1994  Animación\n",
       "3          Moana  2016  Animación\n",
       "4           Coco  2017  Animación"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Accedemos a los datos por el nombre:\n",
    "# \":\" indica que accederemos a todas las filas\n",
    "# \":Género\" indica que accederemos la columna \"Género\" y las columnas anteriores a esta\n",
    "df_peliculas.loc[:, :'Género']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Filtrado y selección de datos\n",
    "\n",
    "Podemos filtrar el DataFrame según ciertas condiciones. En este caso buscaremos películas con clasificación mayor a 8. Recordemos siempre asignar el resultado a una variable para no perderla.\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Título</th>\n",
       "      <th>Año</th>\n",
       "      <th>Género</th>\n",
       "      <th>Duración</th>\n",
       "      <th>Calificación</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Toy Story</td>\n",
       "      <td>1995</td>\n",
       "      <td>Animación</td>\n",
       "      <td>81</td>\n",
       "      <td>8.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>The Lion King</td>\n",
       "      <td>1994</td>\n",
       "      <td>Animación</td>\n",
       "      <td>88</td>\n",
       "      <td>8.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Coco</td>\n",
       "      <td>2017</td>\n",
       "      <td>Animación</td>\n",
       "      <td>105</td>\n",
       "      <td>8.4</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          Título   Año     Género  Duración  Calificación\n",
       "1      Toy Story  1995  Animación        81           8.3\n",
       "2  The Lion King  1994  Animación        88           8.5\n",
       "4           Coco  2017  Animación       105           8.4"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "peliculas_top = df_peliculas[df_peliculas['Calificación'] > 8]\n",
    "peliculas_top"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "También podríamos querer buscar películas que fueron estrenadas después del año 2000."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Título</th>\n",
       "      <th>Año</th>\n",
       "      <th>Género</th>\n",
       "      <th>Duración</th>\n",
       "      <th>Calificación</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Frozen</td>\n",
       "      <td>2013</td>\n",
       "      <td>Animación</td>\n",
       "      <td>102</td>\n",
       "      <td>7.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Moana</td>\n",
       "      <td>2016</td>\n",
       "      <td>Animación</td>\n",
       "      <td>107</td>\n",
       "      <td>7.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Coco</td>\n",
       "      <td>2017</td>\n",
       "      <td>Animación</td>\n",
       "      <td>105</td>\n",
       "      <td>8.4</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Título   Año     Género  Duración  Calificación\n",
       "0  Frozen  2013  Animación       102           7.4\n",
       "3   Moana  2016  Animación       107           7.6\n",
       "4    Coco  2017  Animación       105           8.4"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "peliculas_recientes = df_peliculas[df_peliculas['Año'] > 2000]\n",
    "peliculas_recientes"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "425t2Okzz_6B"
   },
   "source": [
    "# Modificación de estructura y datos\n",
    "\n",
    "`Pandas` entrega mucha flexibilidad para manejar los datos, con una sintaxis intuitiva. Podemos agregar nuevos datos o nuevas columnas al _DataFrame_.\n",
    "\n",
    "Primero probaremos agregando una nueva película. Para ello definimos un diccionario que contenga la información de la nueva película. Luego convertiremos el diccionario en un **_DataFrame_** de una sola fila."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "nueva_pelicula = {\n",
    "    'Título': 'Encanto',\n",
    "    'Año': 2021,\n",
    "    'Género': 'Animación',\n",
    "    'Duración': 102,\n",
    "    'Calificación': 7.2,\n",
    "}\n",
    "\n",
    "df_nueva_pelicula = pd.DataFrame([nueva_pelicula])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Al envolver nueva_pelicula entre corchetes `[ ]`, indicamos que queremos un _DataFrame_ con una fila."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Utilizamos `pd.concat()` para concatenar el nuevo _DataFrame_ `df_nueva_pelicula` al _DataFrame_ original `df_peliculas`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Título</th>\n",
       "      <th>Año</th>\n",
       "      <th>Género</th>\n",
       "      <th>Duración</th>\n",
       "      <th>Calificación</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Frozen</td>\n",
       "      <td>2013</td>\n",
       "      <td>Animación</td>\n",
       "      <td>102</td>\n",
       "      <td>7.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Toy Story</td>\n",
       "      <td>1995</td>\n",
       "      <td>Animación</td>\n",
       "      <td>81</td>\n",
       "      <td>8.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>The Lion King</td>\n",
       "      <td>1994</td>\n",
       "      <td>Animación</td>\n",
       "      <td>88</td>\n",
       "      <td>8.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Moana</td>\n",
       "      <td>2016</td>\n",
       "      <td>Animación</td>\n",
       "      <td>107</td>\n",
       "      <td>7.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Coco</td>\n",
       "      <td>2017</td>\n",
       "      <td>Animación</td>\n",
       "      <td>105</td>\n",
       "      <td>8.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Encanto</td>\n",
       "      <td>2021</td>\n",
       "      <td>Animación</td>\n",
       "      <td>102</td>\n",
       "      <td>7.2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          Título   Año     Género  Duración  Calificación\n",
       "0         Frozen  2013  Animación       102           7.4\n",
       "1      Toy Story  1995  Animación        81           8.3\n",
       "2  The Lion King  1994  Animación        88           8.5\n",
       "3          Moana  2016  Animación       107           7.6\n",
       "4           Coco  2017  Animación       105           8.4\n",
       "5        Encanto  2021  Animación       102           7.2"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_peliculas = pd.concat([df_peliculas, df_nueva_pelicula], ignore_index=True)\n",
    "df_peliculas"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Podemos también aplicar otras modificaciones. A continuación, calcularemos la calificación ajustada multiplicando la calificación por 10. Primero agregaremos una nueva columna llamada `'Clasificación Ajustada'`, la cual toma una columna existente y la modifica (no permanentemente)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Título</th>\n",
       "      <th>Año</th>\n",
       "      <th>Género</th>\n",
       "      <th>Duración</th>\n",
       "      <th>Calificación</th>\n",
       "      <th>Calificación Ajustada</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Frozen</td>\n",
       "      <td>2013</td>\n",
       "      <td>Animación</td>\n",
       "      <td>102</td>\n",
       "      <td>7.4</td>\n",
       "      <td>74.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Toy Story</td>\n",
       "      <td>1995</td>\n",
       "      <td>Animación</td>\n",
       "      <td>81</td>\n",
       "      <td>8.3</td>\n",
       "      <td>83.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>The Lion King</td>\n",
       "      <td>1994</td>\n",
       "      <td>Animación</td>\n",
       "      <td>88</td>\n",
       "      <td>8.5</td>\n",
       "      <td>85.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Moana</td>\n",
       "      <td>2016</td>\n",
       "      <td>Animación</td>\n",
       "      <td>107</td>\n",
       "      <td>7.6</td>\n",
       "      <td>76.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Coco</td>\n",
       "      <td>2017</td>\n",
       "      <td>Animación</td>\n",
       "      <td>105</td>\n",
       "      <td>8.4</td>\n",
       "      <td>84.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Encanto</td>\n",
       "      <td>2021</td>\n",
       "      <td>Animación</td>\n",
       "      <td>102</td>\n",
       "      <td>7.2</td>\n",
       "      <td>72.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          Título   Año     Género  Duración  Calificación  \\\n",
       "0         Frozen  2013  Animación       102           7.4   \n",
       "1      Toy Story  1995  Animación        81           8.3   \n",
       "2  The Lion King  1994  Animación        88           8.5   \n",
       "3          Moana  2016  Animación       107           7.6   \n",
       "4           Coco  2017  Animación       105           8.4   \n",
       "5        Encanto  2021  Animación       102           7.2   \n",
       "\n",
       "   Calificación Ajustada  \n",
       "0                   74.0  \n",
       "1                   83.0  \n",
       "2                   85.0  \n",
       "3                   76.0  \n",
       "4                   84.0  \n",
       "5                   72.0  "
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_peliculas['Calificación Ajustada'] = df_peliculas['Calificación'] * 10\n",
    "df_peliculas"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Otras características interesantes son la agrupación, utilizando `.groupby`. En caso de contar con enormes cantidades de datos, estas opraciones son realizadas de forma muy eficiente en tiempo. En el siguiente ejemplo agruparemos por `'Género'` y obtendremos el promedio de `'Calificación'`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Género\n",
       "Animación    7.9\n",
       "Name: Calificación, dtype: float64"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "promedio_calificacion = df_peliculas.groupby('Género')['Calificación'].mean()\n",
    "promedio_calificacion"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Visualización usando Matplotlib\n",
    "\n",
    "Finalmente podemos utilizar `Pandas` en combinación con otras librerías, y en este caso demostraremos `matplotlib` como una potente y rápida herramienta de visualización.\n",
    "\n",
    "Crearemos un gráfico de barras que visualiza esta clasificación según IMDb."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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7d+//7b7kqMc2Z/Onj2rZs2ayc/PT6NGjVKBAgV0/PhxLVmy5I7LHzNmjCZOnKiWLVuqZcuW2r17t5o1a6akpCS7dlevXlVERIROnTqlAQMGqGTJktqyZYtGjx6t06dPa/r06Xe9jm5uburWrZteeeUV/fjjj2rVqlW67caNG6fo6Gj169dPtWrVUnx8vHbu3Kndu3eradOmtnbJycmKjIxU7dq19dZbb2nNmjWaMmWKQkJC9Mwzz9jaDRgwQLGxserdu7eGDh2qY8eOadasWdqzZ482b96sPHnyqEePHvr444+1atUqtW7d2vbav/76S+vWrdPYsWPver0B3KcMAMgGcXFxhiSjbdu2Dr/m6tWraaZFRkYapUuXtpsWERFhRERE2J4fO3bMkGTExMTYpsXExBiSjB07dti9NioqyggKCrI9X7dunSHJGDp0aJq+U1JSMlXbpUuXDC8vL6N27drGP//8k+Gybq3hq6++MiQZEydOtHtNp06dDIvFYhw+fNg2TZLh7u5uN23fvn2GJGPmzJm2aX379jUCAgKMv//+226ZXbt2NXx8fGzr07ZtWyM8PDzNut3J9OnTDUnGokWLbNOuXLlilClTxpBkrF+/3rbeoaGhRmRkZJr3Mzg42GjatOlt+0ndtuPHjzfOnTtn/PXXX8aGDRuMqlWrGpKML7/8MlN9pO4Xx44ds027dX/66KOPDEnG1KlT09STuvz169fbreet9d68L44dO9a49Z9fR/anpUuXprsP38nZs2cNd3d3o1WrVnbvx3/+8x9DkhEVFWWbNmHCBCNfvnzG77//breMUaNGGW5ubsaJEydu21dERMRt95/UdZgxY4ZtWlBQkF0NVapUMVq1anXbfqKiogxJxquvvmo3vWrVqkb16tVtzzdt2mRIMubPn2/XbuXKlXbTk5OTjRIlShhdunSxazd16lTDYrEYR48evW09AB48nA4HIFvEx8dLkry8vBx+jaenp+3/4+Li9PfffysiIkJHjx61O53Gmb788ktZLJZ0f/m9eVhjR2pbvXq1EhISNGrUqDTXKN1uiOTvvvtObm5uGjp0qN305557ToZhaMWKFXbTmzRpYnc0onLlyvL29tbRo0cl3Tiy9OWXX6pNmzYyDEN///237REZGam4uDjt3r1b0o1rpv744w/t2LHjtu9TejUHBASoU6dOtml5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HUf//v01a9Ys9ezZU7t27VJAQIA++eQT5c2b165drly59MEHH6hFixYKDw9X7969Vbx4cZ06dUrr16+Xt7e3vvnmm0yvX1b20bNnT3388ccaMWKEtm/frnr16unKlStas2aNBg4cqLZt28rHx0edO3fWzJkzZbFYFBISouXLlzt0DY2j+9O8efP0zjvvqH379goJCVFCQoLef/99eXt7q2XLlhkuP/X+OdHR0WrdurVatmypPXv2aMWKFSpcuLBd25EjR2rZsmVq3bq1evXqperVq+vKlSv673//qy+++ELHjx9P85pbxcXF6dNPP5V0IwgfPnxYS5Ys0ZEjR9S1a9d0A8nNwsLC1KBBA1WvXl0FCxbUzp079cUXX2jw4MF3eivTiIiI0IABAxQdHa29e/eqWbNmypMnjw4dOqTFixdrxowZdoN5pN4TbPHixSpQoECGw3gDyAFcMCIdAJP7/fffjf79+xulSpUy3N3dDS8vL6Nu3brGzJkzjX///dfWbtmyZUblypUNDw8Po1SpUsbkyZNtwxXfbkjjexki2zAM4/r168abb75plC9f3nB3dzf8/PyMFi1aGLt27cp0baltH3nkEcPT09Pw9vY2atWqZXz22We3rSEhIcF49tlnjWLFihl58uQxQkNDjTfffNNuiGPDuDFE9qBBg9K8x7cOO2wYhnHmzBlj0KBBRmBgoJEnTx6jaNGiRuPGjY25c+fa2rz33ntG/fr1jUKFChlWq9UICQkxRo4cacTFxaXp41b/+9//jMcee8zImzevUbhwYWPYsGG2oYhvHTp6z549RocOHWz9BAUFGY8//rixdu3a2/aRum3ffPPNO9bjSB+ODJFtGDeGsH7ppZeM4OBg23vXqVMn48iRI7Y2586dMzp27GjkzZvX8PX1NQYMGGDs37/foSGyHdmfdu/ebXTr1s0oWbKkYbVaDX9/f6N169bGzp077/heJCcnG+PHjzcCAgIMT09Po0GDBsb+/fvT3U8SEhKM0aNHG2XKlDHc3d2NwoULG4888ojx1ltvGUlJSbftJyIiwpBke+TPn98IDQ01nnzySeP7779P9zW31jBx4kSjVq1aRoECBQxPT0+jfPnyxmuvvWbXd1RUlJEvX740y0rvvTUMw5g7d65RvXp1w9PT0/Dy8jIqVapkvPDCC8aff/6Zpu2iRYsMScZTTz11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fvzxR9WrV0+enp4KDAzU0KFDdeXKFdv8UqVK6fXXX1efPn3k5eWlkiVLau7cudn6fjwIbt5WPj4+slgstuf+/v6aOnWqSpQoIavVart5cKpGjRqluafWuXPn5O7unuEvisuWLdPAgQPVuXNnBQcHq0qVKurbt6+ef/55STd+7frhhx80Y8YM23Y/fvy4pNvvM9KNI0i37mt9+vRR69at7Wq4du2a/P399eGHHzrjLcw2t9tWRYsWtQusu3btUo0aNZQ3b1498sgjdmFJkr7++mtVq1ZNHh4eKl26tMaPH2/3XmbWrafDnThxQm3btlX+/Pnl7e2txx9/XGfOnLHNTz2y9Mknn6hUqVLy8fFR165dlZCQ4FB/P//8sx599FHVqVNHX331le1L/K2nwznST0JCgrp37658+fIpICBA06ZNM8XRyGrVqikwMFBLliyxTVuyZIlKliypqlWr2qYlJiZq6NCh8vf3l4eHhx599FHt2LHDNj85OVl9+/ZVcHCwPD09Va5cOc2YMcOur169eqldu3Z66623FBAQoEKFCmnQoEG6du2arc0nn3yiGjVqyMvLS0WLFtUTTzyhs2fPZuE7YE4DBw6UxWLR9u3b1bFjR5UtW1bh4eEaMWKEtm7dKunOn19J+uabb1SzZk15eHiocOHCat++vW3exYsX1bNnT/n6+ipv3rxq0aKFDh06lK3rmROl9x3L19dX0o0zBT744AO1b99eefPmVWhoqJYtW2b3+l9++UWtW7eWt7e3vLy8VK9ePR05ckTSjaP5TZs2VeHCheXj46OIiAjt3r3b7vW36+P48eNq2LChJMnX19fuaPKd/obgBkJQDjVv3jy5u7tr8+bNevfdd3Xq1Cm1bNlSNWvW1L59+zRnzhx9+OGHmjhxoqQbv1CePn3a9tizZ48KFSqk+vXrS7rxC3Dz5s3VsWNH/fzzz/r888/1448/pvlCPmXKFNWoUUN79uzRwIED9cwzz6T5MoiMzZgxQ1OmTNFbb72ln3/+WZGRkXrsscds/5j169dPCxYsUGJiou01n376qYoXL65GjRqlu8yiRYtq3bp1OnfuXIZ91qlTR/3797dt/8DAwDvuM6lu3df69eunlStX2h1FWb58ua5evaouXbrc61t033rppZc0ZcoU7dy5U7lz51afPn1s8zZt2qSePXtq2LBh+vXXX/Xee+8pNjZWr732mlP6TklJUdu2bXXhwgX98MMPWr16tY4ePZrm/T5y5Ii++uorLV++XMuXL9cPP/ygSZMm3XH5W7ZsUUREhDp27KhPP/1UuXPf/iSCO/UzYsQIbd68WcuWLdPq1au1adOmNP/451R9+vSx+2X5o48+Uu/eve3avPDCC/ryyy81b9487d69W2XKlFFkZKQuXLgg6cb2LlGihBYvXqxff/1VY8aM0X/+8x8tWrTIbjnr16/XkSNHtH79es2bN0+xsbGKjY21zb927ZomTJigffv26auvvtLx48c5Jc/JLly4oJUrV2rQoEHKly9fmvkFChRw6PP77bffqn379mrZsqX27NmjtWvXqlatWrb5vXr10s6dO7Vs2TL99NNPMgxDLVu2tAu9cL7x48fr8ccf188//6yWLVuqe/futs/pqVOnVL9+fVmtVq1bt067du1Snz59bD9+JSQkKCoqSj/++KO2bt2q0NBQtWzZMs0PUxn1ERgYqC+//FKSdPDgQZ0+fdr2Y8id/obg/xh4YEVFRRlubm5Gvnz5bI9OnToZERERRtWqVe3a/uc//zHKlStnpKSk2KbNnj3byJ8/v5GcnGzX9p9//jFq165ttG7d2javb9++xlNPPWXXbtOmTUauXLmMf/75xzAMwwgKCjKefPJJ2/yUlBTD39/fmDNnjlPXOyeJiYkxfHx8bM+LFStmvPbaa3ZtatasaQwcONAwjBvbxtfX1/j8889t8ytXrmyMGzcuwz5++eUXo0KFCkauXLmMSpUqGQMGDDC+++47uzYRERHGsGHD7KY5ss+kt68ZhmGEhYUZkydPtj1v06aN0atXrwxrfBDcuq1SrV+/3pBkrFmzxjbt22+/NSTZPhuNGzc2Xn/9dbvXffLJJ0ZAQECG/Y0dO9aoUqVKhvODgoKMadOmGYZhGN9//73h5uZmnDhxwjb/l19+MSQZ27dvty0vb968Rnx8vK3NyJEjjdq1a2fYR+q6ubu7Gz169Ei3za3vy536iY+PN/LkyWMsXrzYNv/SpUtG3rx50+yDOUlUVJTRtm1b4+zZs4bVajWOHz9uHD9+3PDw8DDOnTtntG3b1oiKijIuX75s5MmTx5g/f77ttUlJSUaxYsWMN954I8PlDxo0yOjYsaNdf0FBQcb169dt0zp37mx06dIlw2Xs2LHDkGQkJCTc49oi1bZt2wxJxpIlSzJs48jnt06dOkb37t3Tff3vv/9uSDI2b95sm/b3338bnp6exqJFi5y0JuaT3nesfPny2f6NlmS8/PLLtvaXL182JBkrVqwwDMMwRo8ebQQHBxtJSUkO9ZecnGx4eXkZ33zzjW3anfpI/Rt98eJFuzZ38zfEjDgS9IBr2LCh9u7da3u8/fbbkqTq1avbtTtw4IDq1Kkji8Vim1a3bl1dvnxZf/zxh13bPn36KCEhQQsWLFCuXDd2kX379ik2Nlb58+e3PSIjI5WSkqJjx47ZXlu5cmXb/6eeOsTpFY6Jj4/Xn3/+qbp169pNr1u3rg4cOCBJ8vDwUI8ePfTRRx9Jknbv3q39+/ff9tfbsLAw7d+/X1u3blWfPn109uxZtWnTRv369bttPY7uM7fua9KNI1apv3afOXNGK1assDsykhPdvO8HBARIkm3f37dvn1599VW7z0/qkberV6/ec98HDhxQYGCgAgMDbdPCwsJUoEAB274j3TiFzsvLy65ORz6fbdu21dKlS7Vp0yaH6rldP0ePHtW1a9fsfsX28fFRuXLlHFr2g87Pz0+tWrVSbGysYmJi1KpVKxUuXNg2/8iRI7p27Zrd34E8efKoVq1adtty9uzZql69uvz8/JQ/f37NnTtXJ06csOsrPDxcbm5utue3bu9du3apTZs2KlmypLy8vBQRESFJaZaDu2cYxh3bOPL53bt3rxo3bpzh63Pnzq3atWvbphUqVEjlypWz22eQebd+x9q7d6/d4CY3/93Ply+fvL29bZ+xvXv3ql69esqTJ0+6yz5z5oz69++v0NBQ+fj4yNvbW5cvX07z+btdH+lx9G8IGBjhgZcvXz6VKVMm3el3Y+LEiVq1apW2b99u9yXm8uXLGjBggIYOHZrmNTdf0Hvrh91isSglJeWuakH6+vXrp4ceekh//PGHYmJi1KhRIwUFBd32Nbly5VLNmjVVs2ZNDR8+XJ9++ql69Oihl156ScHBwfdUT3r7Ws+ePTVq1Cj99NNP2rJli4KDg1WvXr176ud+d/O+nxocU/f9y5cva/z48erQoUOa13l4eGRPgbr7z+d7772nF154QS1atNB3331nO03W2f2YRZ8+fWynEs+ePTvTr1+4cKGef/55TZkyRXXq1JGXl5fefPNNbdu2za7d7bbDlStXFBkZqcjISM2fP19+fn46ceKEIiMjlZSUdJdrhluFhobKYrHc8+AHDD7iGhl9x0p1u8/YnbZZVFSUzp8/rxkzZigoKEhWq1V16tRJ8/nj72nW4UiQSVSoUMF2nnCqzZs3y8vLSyVKlJAkffnll3r11Ve1aNEihYSE2L2+WrVq+vXXX1WmTJk0j5w0GpgreXt7q1ixYtq8ebPd9M2bNyssLMz2vFKlSqpRo4bef/99LViw4K6OsKQuL3VgC3d3dyUnJ9u1cWSfyUihQoXUrl07xcTEKDY2Ns01D2ZTrVo1HTx4MN3PT+rR1ntRoUIFnTx5UidPnrRN+/XXX3Xp0iW7feduWSwWzZ07V927d1fLli31ww8/3PWySpcurTx58thdpBsXF2eqYbabN2+upKQkXbt2zTZwTaqQkBDbNXaprl27ph07dti25ebNm/XII49o4MCBqlq1qsqUKWO72NpRv/32m86fP69JkyapXr16Kl++PEfts0DBggUVGRmp2bNn2w0klOrSpUsOfX4rV66c4eA3FSpU0PXr1+1C8Pnz53Xw4EGnfP5xdypXrqxNmzZleF3W5s2bNXToULVs2VLh4eGyWq36+++/M9VH6vevm//9duRvCG7gSJBJDBw4UNOnT9eQIUM0ePBgHTx4UGPHjtWIESOUK1cu7d+/Xz179tSLL76o8PBw/fXXX5JufMAKFiyoF198UQ8//LAGDx6sfv36KV++fPr111+1evVqzZo1y8Vrl3OMHDlSY8eOVUhIiB566CHFxMRo7969mj9/vl27fv36afDgwcqXL5/dCEHp6dSpk+rWratHHnlERYsW1bFjxzR69GiVLVtW5cuXl3Tj9KVt27bp+PHjyp8/vwoWLHjHfeZO+vXrp9atWys5OVlRUVF3/6bkAGPGjFHr1q1VsmRJderUSbly5dK+ffu0f//+NANN3Oyff/7R3r177aZ5eXml+ZGiSZMmqlSpkrp3767p06fr+vXrGjhwoCIiIlSjRg2nrIPFYtG7774rNzc3tWzZUt9++63d6JGO8vLyUlRUlEaOHKmCBQvK399fY8eOVa5cuexOvczJ3NzcbKel3Hy6mnTjl+dnnnnG9v6ULFlSb7zxhq5evaq+fftKunF04eOPP9aqVasUHBysTz75RDt27MjUUd2SJUvK3d1dM2fO1NNPP639+/drwoQJzltJ2MyePVt169ZVrVq19Oqrr6py5cq6fv26Vq9erTlz5ujXX3+94+d37Nixaty4sUJCQtS1a1ddv35d3333nV588UWFhoaqbdu26t+/v9577z15eXlp1KhRKl68uNq2bevitX+wJSYm2r4PpcqdO7fdKawZGTx4sGbOnKmuXbtq9OjR8vHx0datW1WrVi2VK1dOoaGhthEa4+PjNXLkyEwf8QsKCpLFYtHy5cvVsmVLeXp6Kn/+/Hf8G4IbOBJkEsWLF9d3332n7du3q0qVKnr66afVt29fvfzyy5KknTt36urVq5o4caICAgJsj9TTdypXrqwffvhBv//+u+rVq6eqVatqzJgxKlasmCtXK8cZOnSoRowYoeeee06VKlXSypUrtWzZMoWGhtq169atm3Lnzq1u3brd8XSqyMhIffPNN2rTpo3Kli2rqKgolS9fXt9//71tlK/nn39ebm5uCgsLs50Wc6d95k6aNGmigIAARUZGmn4/iYyM1PLly/X999+rZs2aevjhhzVt2rQ7nsb4+++/q2rVqnaPAQMGpGlnsVj09ddfy9fXV/Xr11eTJk1UunRpff75505dD4vFotmzZ6t3795q1aqV1q9ff1fLmTp1qurUqaPWrVurSZMmqlu3ripUqJCtpwa6mre3t7y9vdOdN2nSJHXs2FE9evRQtWrVdPjwYa1atco2NO+AAQPUoUMHdenSRbVr19b58+c1cODATPXv5+en2NhYLV68WGFhYZo0aZLeeuute14vpFW6dGnt3r1bDRs21HPPPaeKFSuqadOmWrt2rebMmePQ57dBgwZavHixli1bpoceekiNGjXS9u3bbfNjYmJUvXp1tW7dWnXq1JFhGPruu+8yvB4Fjlm5cqXdd6KAgAA9+uijDr22UKFCWrdunS5fvqyIiAhVr15d77//vm2bfPjhh7p48aKqVaumHj162Ia0zozixYtr/PjxGjVqlIoUKWI7zfZOf0Nwg8Vw5Ko9APeV48ePKyQkRDt27FC1atVcXU66Ll++rOLFiysmJibda2GAVFeuXFHx4sU1ZcoUfqkEAGQLTocDHiDXrl3T+fPn9fLLL+vhhx++LwNQSkqK/v77b02ZMkUFChTQY4895uqScJ/Zs2ePfvvtN9WqVUtxcXF69dVXJYlTdwAA2YYQBDxANm/erIYNG6ps2bL64osvXF1Ouk6cOKHg4GCVKFFCsbGxd7yxJszprbfe0sGDB+Xu7q7q1atr06ZNDp1nDwCAM3A6HAAAAABTYWAEAAAAAKZCCAIAAABgKoQgAAAAAKZCCAIA3PdS72N27NgxV5cCAMgBCEEAgPtKbGysChQoYDetf//++vPPPxUcHHzPy9+wYYMsFosuXbp0z8sCADyYCEEAAKfr1auXLBaLLBaL3N3dVaZMGb366qu6fv16ppc1Y8YMXb16VbNmzcqCSgEAZkQIAgBkiebNm+v06dM6dOiQnnvuOY0bN05vvvlmppczbNgwLV26VLly8U8WAMA5+BcFAJAlrFarihYtqqCgID3zzDNq0qSJli1bpsTERD3//PMqXry48uXLp9q1a2vDhg0ZLmfcuHF66KGH7KZ99NFHCg8Pl9VqVUBAgAYPHixJOn78uCwWi/bu3Wtre+nSJVkslgz7OH/+vLp166bixYsrb968qlSpkj777DO7Nl988YUqVaokT09PFSpUSE2aNNGVK1fu5m0BANwHCEEAgGzh6emppKQkDR48WD/99JMWLlyon3/+WZ07d1bz5s116NAhh5YzZ84cDRo0SE899ZT++9//atmyZSpTpsxd1/Xvv/+qevXq+vbbb7V//3499dRT6tGjh7Zv3y5JOn36tLp166Y+ffrowIED2rBhgzp06CDuNQ4AD67cri4AAJCzGYahtWvXatWqVerWrZtiYmJ04sQJFStWTJL0/PPPa+XKlYqJidHrr79+x+VNnDhRzz33nIYNG2abVrNmzbuur3jx4nr++edtz4cMGaJVq1Zp0aJFqlWrlk6fPq3r16+rQ4cOCgoKkiRVqlTprvsDALgeIQgAkCWWL1+u/Pnz69q1a0pJSdETTzyhTp06KTY2VmXLlrVrm5iYqEKFCt1xmWfPntWff/6pxo0bO63O5ORkvf7661q0aJFOnTqlpKQkJSYmKm/evJKkKlWqqHHjxqpUqZIiIyPVrFkzderUSb6+vk6rAQCQvQhBAIAs0bBhQ82ZM0fu7u4qVqyYcufOrc8//1xubm7atWuX3Nzc7Nrnz5//jsv09PS87fzUwRNuPlXt2rVrt33Nm2++qRkzZmj69OmqVKmS8uXLp+HDhyspKUmS5ObmptWrV2vLli36/vvvNXPmTL300kvatm2bU4bsBgBkP64JAgBkiXz58qlMmTIqWbKkcue+8Ztb1apVlZycrLNnz6pMmTJ2j6JFi95xmV5eXipVqpTWrl2b7nw/Pz9JN67jSXXzIAnp2bx5s9q2basnn3xSVapUUenSpfX777/btbFYLKpbt67Gjx+vPXv2yN3dXUuXLr1jvQCA+xNHggAA2aZs2bLq3r27evbsqSlTpqhq1ao6d+6c1q5dq8qVK6tVq1Z3XMa4ceP09NNPy9/fXy1atFBCQoI2b96sIUOGyNPTUw8//LAmTZqk4OBgnT17Vi+//PJtlxcaGqovvvhCW7Zska+vr6ZOnaozZ84oLCxMkrRt2zatXbtWzZo1k7+/v7Zt26Zz586pQoUKTnlPAADZjyNBAIBsFRMTo549e+q5555TuXLl1K5dO+3YsUMlS5Z06PVRUVGaPn263nnnHYWHh6t169Z2I8t99NFHun79uqpXr67hw4dr4sSJt13eyy+/rGrVqikyMlINGjRQ0aJF1a5dO9t8b29vbdy4US1btlTZsmX18ssva8qUKWrRosVdrT8AwPUsBmN8AgAAADARjgQBAAAAMBVCEAAAAABTIQQBAAAAMBVCEAAAAABTIQQBAAAAMBVCEAAAAABTIQQBAAAAMBVCEAAAAABTIQQBAAAAMBVCEAAAAABTIQQBAAAAMBVCEAAAAABT+X+YA4mO/ATA8AAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 1000x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt # también un alias ampliamente usado\n",
    "\n",
    "plt.figure(figsize=(10,5))\n",
    "plt.bar(df_peliculas['Título'], df_peliculas['Calificación'], color='skyblue')\n",
    "plt.title('Calificaciones de Películas de Disney')\n",
    "plt.xlabel('Películas')\n",
    "plt.ylabel('Calificación IMDb')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Combinación de varios Dataframes\n",
    "\n",
    "Supongamos que tenemos información financiera adicional de nuestras películas de Disney, como el presupuesto y la recaudación en taquilla. Crearemos un nuevo _DataFrame_ con esta información.\n",
    "\n",
    "Veremos la potencia de utilizar otra forma de concatenar `.join`: Para poder utilizar `.join`, necesitamos que ambos _DataFrames_ tengan el mismo índice. Por lo tanto, estableceremos `'Título'` como índice en nuestro _DataFrame_ original `df_peliculas`.\n",
    "\n",
    "Podemos realizar una visualización interesante. Por ejemplo, podemos crear un gráfico de dispersión que muestre la relación entre el presupuesto y la recaudación en taquilla de las películas."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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xo0b5vbp06cbkiz2s/T4PLBmGQUKFDDCw8PNz+/9e5Dafah27dopvp9S2mcedR8oW7asxfsgtZLe0xs3bjS3nT171vDy8nqkz5j7Sdp2P/300337lC1b1siePbv5+b2fcz///LMhydi8efN955G0n+fMmdO4ePGiuf2XX34xJBm//vqruS213wM+//xzQ5IRFRVlbrt586aRK1cui/0DTydOL8RTLSQkRLlz55a/v79eeOEFubu7a9GiRcqfP7+kO/eiWbFihdq0aaO4uDidP39e58+f14ULFxQaGqqDBw8+cLTDu38BvHr1qs6fP69q1arJMAxt375dknTu3DmtWbNGnTt3VkBAgMXrH/TL+J9//qmbN2+qb9++Fhdqd+3aVZ6enslO48qWLZvF9QvOzs6qXLmyDh8+/MBttGDBAiUmJqpNmzbm9T9//rx8fHxUtGhRrVy5Mk2WczcXFxd16tTJou2nn35SUFCQihcvbhFH0sXU98aRkqtXryp37tzKnTu3ihQporfffltVq1bVzz//bNEvMDAw2SlsP/30k2rWrKns2bNbLD8kJES3b9/WmjVrJEne3t66evVqqk7VSS0/Pz+LI0Oenp7q2LGjtm/frtOnT1s1r8jISMXExKhdu3YW6+Ho6KgqVaqYt6Obm5ucnZ21atUqXbp0yeqYf//9d1WuXFk1atQwt2XLlk3dunXT0aNHtXfv3vu+1svLS82bN9f3338vwzAkSbdv39aPP/6o559/Xu7u7g9d/r59+8y5Ll68uD788EM1a9bM4pS51O7b27dv15EjR9S3b99kg0fc/R69+/1+/fp1nT9/Xs8++6ykO/fQs9bvv/8u6c6AAnfr27dvsr53LzshIUEXLlxQkSJF5O3tbbHs+fPnq2zZsikeabzf582pU6e0Y8cORUREKEeOHOb2MmXKqH79+uY47/baa69ZPK9Zs6YuXLig2NjYFJch3Tkd7OzZs3rttdcsRkWMiIiQl5eXRd/0+DxIi2UkSe0+9DhSuw94e3trz549OnjwoFXz//333/Xss8+qcuXK5rbcuXOrffv2Fv1S+xnzOLJly6a4uLj7Tk/axosXL1ZCQsID5/Xiiy9anN2SdPZF0t8sa74HtGnTRq6urpo9e7Z5fkuXLtX58+ct/i7i6cTphXiqffrpp3rmmWd0+fJlff3111qzZo3F6Ef//vuvDMPQkCFDNGTIkBTncfbsWeXLly/FadHR0Ro6dKgWLVqU7Ivr5cuXJf3/B/vdp1GlxrFjxyTducblbs7OzipUqJB5epL8+fMn++OePXt27dq164HLOXjwoAzDUNGiRVOcfu8IZ4+6nLvly5cv2VDUBw8eVFRUlHLnzp3ia+69Ticlrq6u+vXXXyXdKewCAwPNBfbdAgMDk7UdPHhQu3bteujye/Tooblz56phw4bKly+fGjRooDZt2igsLOyh8d1PkSJFkm3TZ555RtKdU+Z8fHxSPa+kL1p3j/x1N09PT0l3ts/YsWP1xhtvKG/evHr22WfVpEkTdezYMVXLO3bsmKpUqZKsPSgoyDz9Qft8x44d9eOPP2rt2rWqVauW/vzzT505c0YdOnR46LKlO9ebffHFF0pMTNShQ4c0atQonTt3zmKAiNTu20mnnD3sPZp0w+Affvgh2f6Y9H63xrFjx+Tg4KDChQtbtN/7npeka9euacyYMZoxY4ZOnDhhLlbvXfahQ4fUqlUrq+O433KDgoK0dOlSXb161aIYvvcHpKQvtZcuXTLvY/dbzr35cHJyUqFChSza0uPzIC2WkSS1+9DjSO0+MHLkSDVv3lzPPPOMSpUqpbCwMHXo0EFlypR54Pzv956+d79I7WfM47hy5Yo8PDzuO7127dpq1aqVRowYoU8++UR16tTR888/r5deeinZCIcP2lcl674HeHt7q2nTppozZ47ee+89SXdOLcyXL999tweeHhRdeKpVrlzZPHrh888/rxo1auill17S/v37lS1bNvMFwgMGDLjvxftFihRJsf327duqX7++Ll68qEGDBql48eJyd3fXiRMnFBERke73C7rfyE53/2FOSWJiokwmk/74448U55EtW7Y0Wc7dUrpGIDExUaVLl9b48eNTfM3d13vcj6Ojo0JCQh55+fXr19ebb76Z4muSiqA8efJox44dWrp0qf744w/98ccfmjFjhjp27KhZs2ZJuv8v27dv335obPeT2nkm7XfffvttisVTliz//2ehb9++atq0qRYuXKilS5dqyJAhGjNmjFasWGHzm+KGhoYqb968+u6771SrVi1999138vHxSVX+JMnd3d2ib/Xq1VW+fHm9/fbbmjRpkiTr9+2HadOmjdavX6+BAwcqODjY/BkSFhZm8X63Rf5ff/11zZgxQ337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AEDm17lzZ82cOVOzZs1K9qN+avzwww8aMGCAunTpomXLlmnHjh3q1KmTbt68adHPycnJ4rnJZDIXVlevXlVoaKg8PT01e/Zsbd68WT///LMkJZsP8KisOtJ1+vRp+fr6JmvPnTu3Tp06lWZBAQAAIPMLCwvTzZs3ZTKZFBoaajGtcOHCcnZ21rp168yXuCQkJGjz5s3q27evpDunJFarVk09evQwv+7QoUNWxbBv3z5duHBBH3zwgfz9/SVJW7ZseYy1ApKz6kiXv7+/1q1bl6x93bp13KsLAAAAVnF0dFRUVJT27t1rcfqfJLm7u6t79+4aOHCglixZor1796pr166Kj49Xly5dJElFixbVli1btHTpUh04cEBDhgyxGN0wNQICAuTs7KzJkyfr8OHDWrRokd577700W0dAsvJIV9euXdW3b18lJCSobt26kqTly5frzTff1BtvvGGTAAEAAJB5eXp63nfaBx98oMTERHXo0EFxcXGqWLGili5dquzZs0uSXn31VW3fvl0vvviiTCaT2rVrpx49euiPP/5I9fJz586tmTNn6u2339akSZNUvnx5ffTRR2rWrNljrxuQxKqia+DAgbpw4YJ69OhhPsfV1dVVgwYN0ltvvWWTAAEAAJB53D1Ue0oWLlxo/r+rq6smTZqkSZMmpdjXxcVFM2bMsBh6Xroz+NuDljdhwgSL5+3atVO7du0s2gzDeGCcgDWsKrpMJpPGjh2rIUOGKCoqSm5ubipatKhcXFxsFR8AAAAAZGhWFV1JsmXLpkqVKqV1LAAAAACQ6VhddG3ZskVz585VdHR0smE0FyxYkGaBAQAAAEBmYNXohT/88IOqVaumqKgo/fzzz0pISNCePXu0YsUKeXl52SpGAAAAAMiwrCq6Ro8erU8++US//vqrnJ2dNXHiRO3bt09t2rRRQECArWIEAAAAgAzLqqLr0KFDaty4sSTJ2dlZV69elclkUr9+/TR9+nSbBAgAAAAAGZlVRVf27NkVFxcnScqXL592794tSYqJiVF8fHzaRwcAAAAAGZxVA2nUqlVLkZGRKl26tFq3bq0+ffpoxYoVioyMVL169WwVIwAAAABkWFYVXVOmTNH169clSe+8846cnJy0fv16tWrVSu+++65NAgQAAADuJ/F2oqLXRivuVJw8fD0UUDNADo5WncwF2JxVRVeOHDnM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3SpTpoxu3bqlnTt3ymQy2TpGAAAAAMiwUnV64X///acKFSpIkkqVKiUXFxf169ePggsAAAAAHiJVRdft27fl7Oxsfp4lSxZly5bNZkEBAAAAQGaRqtMLDcNQRESEXFxcJEnXr1/Xa6+9Jnd3d4t+CxYsSPsIAQAAACADS1XRFR4ebvH85ZdftkkwAAAAAJDZpKromjFjhq3jAAAAAIBM6ZFujgwAAAAASB2KLgAAAACwIYouAAAAALAhii4AAAAAsCGKLgAAAACwIYouAAAAALAhii4AAAAAsCGKLgAAAACwIYouAAAAALAhii4AAAAAsCGKLgAAAACwIYouAAAAALAhii4AAAAAsCGKLgAAAACwIYouAAAAALAhii4AAAAAsCGKLgAAAACwIYouAAAAALAhii4AAAAAsCGKLgAAAACwIYouAAAAALAhii4AAAAAsCGKLgAAAACwIYouAAAAALAhii4AAAAAsCGKLgAAAACwIYouAAAAALAhii4AAAAAsCGKLgAAAACwIYouAAAAALAhii4AAAAAsCGKLgAAAACwIYouAAAAALAhii4AAAAAsCGKLgAAAACwIYouAAAAALAhii4AAAAAsCGKLgAAAACwIYouAAAAALAhiq5HZDKZHvgYPnx4mi7v9u3b+uCDD1S8eHG5ubkpR44cqlKlir788ktznzp16qhv375pulwAAAAAjyeLvQPIqE6dOmX+/48//qihQ4dq//795rZs2bKl6fJGjBihzz//XFOmTFHFihUVGxurLVu26NKlS2m6HEm6efOmnJ2d03y+AAAAwNOII12PyMfHx/zw8vKSyWQyP8+TJ4/Gjx+v/Pnzy8XFRcHBwVqyZIn5tXXr1lWvXr0s5nfu3Dk5Oztr+fLlKS5v0aJF6tGjh1q3bq3AwECVLVtWXbp00YABAyRJERERWr16tSZOnGg+2nb06FFJ0urVq1W5cmW5uLjI19dXgwcP1q1bt8zzrlOnjnr16qW+ffsqV65cCg0NVefOndWkSROLGBISEpQnTx599dVXabEJAQAAgKcCRZcNTJw4UR9//LE++ugj7dq1S6GhoWrWrJkOHjwoSXrllVc0Z84c3bhxw/ya7777Tvny5VPdunVTnKePj49WrFihc+fO3XeZVatWVdeuXXXq1CmdOnVK/v7+OnHihBo1aqRKlSpp586dmjp1qr766iu9//77Fq+fNWuWnJ2dtW7dOk2bNk2vvPKKlixZYnFEb/HixYqPj9eLL774uJsIAAAAeGpQdNnARx99pEGDBqlt27YqVqyYxo4dq+DgYE2YMEGS1LJlS0nSL7/8Yn7NzJkzFRERIZPJlOI8x48fr3PnzsnHx0dlypTRa6+9pj/++MM83cvLS87OzsqaNav5iJujo6M+++wz+fv7a8qUKSpevLief/55jRgxQh9//LESExPNry9atKjGjRunYsWKqVixYqpWrZqKFSumb7/91txnxowZat26dZqfOgkAAABkZhRdaSw2NlYnT55U9erVLdqrV6+uqKgoSZKrq6s6dOigr7/+WpK0bds27d69WxEREfedb4kSJbR79279/fff6ty5s86ePaumTZvqlVdeeWA8UVFRqlq1qkUxV716dV25ckX//fefua1ChQrJXvvKK69oxowZkqQzZ87ojz/+UOfOnR+8AQAAAABYoOiyk1deeUWRkZH677//NGPGDNWtW1cFChR44GscHBxUqVIl9e3bVwsWLNDMmTP11Vdf6ciRI48dj7u7e7K2jh076vDhw9qwYYO+++47BQYGqmbNmo+9LAAAAOBpQtGVxjw9PeXn56d169ZZtK9bt04lSpQwPy9durQqVqyoL774QnPmzHmkI0hJ87t69aokydnZWbdv37boExQUpA0bNsgwDItYPDw8lD9//gfOP2fOnHr++ec1Y8YMzZw5U506dbI6RgAAAOBpl6GKrg8++EAmk8niXlTXr19Xz549lTNnTmXLlk2tWrXSmTNnLF4XHR2txo0bK2vWrMqTJ48GDhxoMXpfWhs4cKDGjh2rH3/8Ufv379fgwYO1Y8cO9enTx6LfK6+8og8++ECGYahFixYPnOcLL7ygTz75RBs3btSxY8e0atUq9ezZU88884yKFy8uSSpYsKA2btyoo0eP6vz580pMTFSPHj10/Phxvf7669q3b59++eUXDRs2TP3795eDw8PT/8orr2jWrFmKiopSeHj4o28UAAAA4CmVYYquzZs36/PPP1eZMmUs2vv166dff/1VP/30k1avXq2TJ0+aB6qQ7txUuHHjxrp586bWr1+vWbNmaebMmRo6dKjNYu3du7f69++vN954Q6VLl9aSJUu0aNEiFS1a1KJfu3btlCVLFrVr106urq4PnGdoaKh+/fVXNW3a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",
      "text/plain": [
       "<Figure size 1000x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# Datos originales de películas que trabajamos anteriormente\n",
    "datos_peliculas = {\n",
    "    'Título': ['Frozen', 'Toy Story', 'The Lion King', 'Moana', 'Coco', 'Encanto'],\n",
    "    'Año': [2013, 1995, 1994, 2016, 2017, 2021],\n",
    "    'Género': ['Animación'] * 6,\n",
    "    'Duración': [102, 81, 88, 107, 105, 102],\n",
    "    'Calificación': [7.4, 8.3, 8.5, 7.6, 8.4, 7.2]\n",
    "}\n",
    "df_peliculas = pd.DataFrame(datos_peliculas)\n",
    "df_peliculas['Calificación Ajustada'] = df_peliculas['Calificación'] * 10\n",
    "\n",
    "# Datos nuevos sobre los datos financieros de estas películas\n",
    "datos_financieros = {\n",
    "    'Título': ['Frozen', 'Toy Story', 'The Lion King', 'Moana', 'Coco', 'Encanto'],\n",
    "    'Presupuesto (millones USD)': [150, 30, 45, 150, 175, 120],\n",
    "    'Recaudación (millones USD)': [1276.5, 373.6, 968.5, 643.3, 807.1, 256.8]\n",
    "}\n",
    "df_finanzas = pd.DataFrame(datos_financieros)\n",
    "\n",
    "# Estableceremos 'Título' como índice en ambos DataFrames, para generar la consistencia al unir\n",
    "df_peliculas.set_index('Título', inplace=True)\n",
    "df_finanzas.set_index('Título', inplace=True)\n",
    "\n",
    "# Finalmente unimos ambos DataFrames\n",
    "df_completo = df_peliculas.join(df_finanzas)\n",
    "\n",
    "# Visualizaremos la unión y las relaciones mediante matplotlib\n",
    "plt.figure(figsize=(10, 6))\n",
    "plt.scatter(df_completo['Presupuesto (millones USD)'], df_completo['Recaudación (millones USD)'], color='purple')\n",
    "plt.title('Relación entre Presupuesto y Recaudación de Películas de Disney')\n",
    "plt.xlabel('Presupuesto (millones USD)')\n",
    "plt.ylabel('Recaudación (millones USD)')\n",
    "\n",
    "for idx, row in df_completo.iterrows():\n",
    "    plt.annotate(idx, (row['Presupuesto (millones USD)'], row['Recaudación (millones USD)']), textcoords=\"offset points\", xytext=(0,10), ha='center')\n",
    "\n",
    "plt.grid(True)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Guardar y abrir datos como CSV\n",
    "\n",
    "Para finalizar, aprenderemos cómo guardar nuestro _DataFrame_ en un archivo CSV y cómo cargar datos desde un archivo CSV utilizando `Pandas`. Esto es esencial para almacenar tus datos y reutilizarlos en futuros análisis sin tener que recrearlos desde cero.\n",
    "\n",
    "**Guardar en un archivo CSV**\n",
    "\n",
    "El método `to_csv()` de `Pandas` te permite guardar un _DataFrame_ en un archivo CSV de manera sencilla. (Ten en cuenta que la siguiente línea de código modificará tus archivos).\n",
    "\n",
    "**Cargar datos desde un archivo CSV**\n",
    "\n",
    "Para cargar datos desde un archivo CSV y crear un _DataFrame_, utilizamos el método `pd.read_csv()`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_peliculas.to_csv('peliculas_disney.csv', index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Año</th>\n",
       "      <th>Género</th>\n",
       "      <th>Duración</th>\n",
       "      <th>Calificación</th>\n",
       "      <th>Calificación Ajustada</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2013</td>\n",
       "      <td>Animación</td>\n",
       "      <td>102</td>\n",
       "      <td>7.4</td>\n",
       "      <td>74.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1995</td>\n",
       "      <td>Animación</td>\n",
       "      <td>81</td>\n",
       "      <td>8.3</td>\n",
       "      <td>83.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1994</td>\n",
       "      <td>Animación</td>\n",
       "      <td>88</td>\n",
       "      <td>8.5</td>\n",
       "      <td>85.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2016</td>\n",
       "      <td>Animación</td>\n",
       "      <td>107</td>\n",
       "      <td>7.6</td>\n",
       "      <td>76.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2017</td>\n",
       "      <td>Animación</td>\n",
       "      <td>105</td>\n",
       "      <td>8.4</td>\n",
       "      <td>84.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>2021</td>\n",
       "      <td>Animación</td>\n",
       "      <td>102</td>\n",
       "      <td>7.2</td>\n",
       "      <td>72.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    Año     Género  Duración  Calificación  Calificación Ajustada\n",
       "0  2013  Animación       102           7.4                   74.0\n",
       "1  1995  Animación        81           8.3                   83.0\n",
       "2  1994  Animación        88           8.5                   85.0\n",
       "3  2016  Animación       107           7.6                   76.0\n",
       "4  2017  Animación       105           8.4                   84.0\n",
       "5  2021  Animación       102           7.2                   72.0"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_cargado = pd.read_csv('peliculas_disney.csv')\n",
    "\n",
    "df_cargado"
   ]
  }
 ],
 "metadata": {
  "colab": {
   "provenance": []
  },
  "kernelspec": {
   "display_name": "3.11.11",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
