{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Librería Pandas" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "(Basado en el tutorial \"10 minutes to pandas\" https://pandas.pydata.org/pandas-docs/stable/10min.html )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Numpy es la librería básica de cálculo en python, con la matriz multidimensional np.array como su estructura fundamental. \n", "\n", "Sin embargo nosotros estudiaremos directamente Pandas, que es una librería especializada en el análisis de datos que puede sernos más útil, aunque nos referiremos en alguna ocasión a Numpy. Pandas tiene dos características que la hacen especialmente interesante: permite utilizar datos heterogéneos, y utilizar etiquetas para identificar datos tabulados fácilmente. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Observar, en cualquier caso, que ambas librerías tienen muchos métodos comunes, por lo que gran parte de la funcionalidad aprendida en Pandas será aplicable también en Numpy (aunque con una sintaxis diferente)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Creación de series y dataframes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Objetos más importantes:\n", "- Series (1 dimensión)\n", "- DataFrame (2 dimensiones)\n", "\n", "También está el Panel (3 dimensiones), pero se usa poco: en general es mejor utilizar un dataframe más complicado." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "from datetime import datetime" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Creación de una serie a partir de una lista:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 angel\n", "1 3\n", "2 5\n", "3 NaN\n", "4 6\n", "5 8\n", "dtype: object" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s = pd.Series(['angel',3,5,np.nan,6,8])\n", "s" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Un dataframe se puede crear de varias formas distintas. En primer lugar se puede crear a partir de un diccionario. Tomamos datos de precipitación de tres estaciones del CENAOS, el Centro de Estudios Atmosféricos, Oceanográficos y Sísmicos de Honduras, como ejemplo:" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [], "source": [ "df = pd.DataFrame({'Estacion':['Los Platos', 'Atima', 'Bomberos-Tegucigalpa'], \n", " 'Date': [datetime(2023,8,27,12), datetime(2023,8,27,12), datetime(2023,8,27,12)],\n", " 'PCP 1h':[0.0, 0.0, 0.0], \n", " 'PCP 6h':[7.6, 0.1, 0.0],\n", " 'PCP 12h':[11.7, 0.1, 7.3],\n", " 'PCP 24h':[11.7, 19.2, 18.8]})\n" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EstacionDatePCP 1hPCP 6hPCP 12hPCP 24h
0Los Platos2023-08-27 12:00:000.07.611.711.7
1Atima2023-08-27 12:00:000.00.10.119.2
2Bomberos-Tegucigalpa2023-08-27 12:00:000.00.07.318.8
\n", "
" ], "text/plain": [ " Estacion Date PCP 1h PCP 6h PCP 12h PCP 24h\n", "0 Los Platos 2023-08-27 12:00:00 0.0 7.6 11.7 11.7\n", "1 Atima 2023-08-27 12:00:00 0.0 0.1 0.1 19.2\n", "2 Bomberos-Tegucigalpa 2023-08-27 12:00:00 0.0 0.0 7.3 18.8" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Observar que las columnas pueden tener distintos tipos de datos:" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Estacion object\n", "Date datetime64[ns]\n", "PCP 1h float64\n", "PCP 6h float64\n", "PCP 12h float64\n", "PCP 24h float64\n", "dtype: object" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.dtypes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "También se puede crear un dataframe especificando cada una de sus filas:" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EstacionDatePCP 1hPCP 6hPCP 12hPCP 24h
0Los Platos2023-08-27 12:00:000.07.611.711.7
1Atima2023-08-27 12:00:000.00.10.119.2
2Bomberos-Tegucigalpa2023-08-27 12:00:000.00.07.318.8
\n", "
" ], "text/plain": [ " Estacion Date PCP 1h PCP 6h PCP 12h PCP 24h\n", "0 Los Platos 2023-08-27 12:00:00 0.0 7.6 11.7 11.7\n", "1 Atima 2023-08-27 12:00:00 0.0 0.1 0.1 19.2\n", "2 Bomberos-Tegucigalpa 2023-08-27 12:00:00 0.0 0.0 7.3 18.8" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.DataFrame([['Los Platos', datetime(2023,8,27,12), 0.0, 7.6, 11.7, 11.7], \n", " ['Atima', datetime(2023,8,27,12), 0.0, 0.1, 0.1, 19.2],\n", " ['Bomberos-Tegucigalpa', datetime(2023,8,27,12), 0.0, 0.0, 7.3, 18.8]],\n", " columns=['Estacion', 'Date', 'PCP 1h', 'PCP 6h', 'PCP 12h', 'PCP 24h'])\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Otra alternativa es cargar los datos a partir de un fichero csv (lo estudiaremos en detalle más adelante). Por ejemplo, estos datos de Buenos Aires tomados de la web del Servicio Meteorológico Nacional de Argentina:" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FechaHoraEstadoT (°C)ST (°C)HR (%)Viento direcciónViento velocidadPresiónVisibilidad
014/08/20230:00Nublado12.8No se calcula37Noroeste9 km/h1014.8 hPa10 km
113/08/202323:00Nublado13.0No se calcula37Noroeste16 km/h1015.2 hPa10 km
213/08/202322:00Nublado13.2No se calcula43Norte7 km/h1015.6 hPa10 km
313/08/202321:00Mayormente nublado13.8No se calcula38Norte11 km/h1015 hPa10 km
413/08/202320:00Mayormente nublado14.9No se calcula33Norte9 km/h1015.2 hPa10 km
513/08/202319:00Mayormente nublado14.7No se calcula32Norte13 km/h1015.6 hPa10 km
613/08/202318:00Parcialmente nublado15.6No se calcula26Norte7 km/h1015.6 hPa10 km
713/08/202317:00Parcialmente nublado16.2No se calcula25Norte14 km/h1016 hPa10 km
813/08/202316:00Algo nublado17.2No se calcula25Norte16 km/h1016.6 hPa10 km
913/08/202315:00Algo nublado16.9No se calcula24Norte16 km/h1017.7 hPa10 km
1013/08/202314:00Ligeramente nublado16.3No se calcula23Norte13 km/h1019.4 hPa10 km
1113/08/202313:00Ligeramente nublado15.2No se calcula25Norte14 km/h1020.6 hPa10 km
1213/08/202312:00Ligeramente nublado14.4No se calcula27Norte7 km/h1021.7 hPa10 km
1313/08/202311:00Ligeramente nublado12.9No se calcula30Noroeste5 km/h1023.2 hPa10 km
1413/08/202310:00Ligeramente nublado10.8No se calcula34Norte9 km/h1023.3 hPa10 km
1513/08/20239:00Ligeramente nublado8.67.544Noroeste7 km/h1022.9 hPa10 km
1613/08/20238:00Ligeramente nublado5.3No se calcula59Norte3 km/h1023.2 hPa10 km
1713/08/20237:00Despejado4.0No se calcula70Oeste3 km/h1023.2 hPa10 km
1813/08/20236:00Despejado3.1No se calcula71CalmaNaN1022.8 hPa10 km
1913/08/20235:00Despejado3.2No se calcula71CalmaNaN1022.8 hPa10 km
2013/08/20234:00Despejado3.4No se calcula70CalmaNaN1023.3 hPa10 km
2113/08/20233:00Despejado3.7No se calcula72CalmaNaN1023.7 hPa10 km
\n", "
" ], "text/plain": [ " Fecha Hora Estado T (°C) ST (°C) HR (%) \\\n", "0 14/08/2023 0:00 Nublado 12.8 No se calcula 37 \n", "1 13/08/2023 23:00 Nublado 13.0 No se calcula 37 \n", "2 13/08/2023 22:00 Nublado 13.2 No se calcula 43 \n", "3 13/08/2023 21:00 Mayormente nublado 13.8 No se calcula 38 \n", "4 13/08/2023 20:00 Mayormente nublado 14.9 No se calcula 33 \n", "5 13/08/2023 19:00 Mayormente nublado 14.7 No se calcula 32 \n", "6 13/08/2023 18:00 Parcialmente nublado 15.6 No se calcula 26 \n", "7 13/08/2023 17:00 Parcialmente nublado 16.2 No se calcula 25 \n", "8 13/08/2023 16:00 Algo nublado 17.2 No se calcula 25 \n", "9 13/08/2023 15:00 Algo nublado 16.9 No se calcula 24 \n", "10 13/08/2023 14:00 Ligeramente nublado 16.3 No se calcula 23 \n", "11 13/08/2023 13:00 Ligeramente nublado 15.2 No se calcula 25 \n", "12 13/08/2023 12:00 Ligeramente nublado 14.4 No se calcula 27 \n", "13 13/08/2023 11:00 Ligeramente nublado 12.9 No se calcula 30 \n", "14 13/08/2023 10:00 Ligeramente nublado 10.8 No se calcula 34 \n", "15 13/08/2023 9:00 Ligeramente nublado 8.6 7.5 44 \n", "16 13/08/2023 8:00 Ligeramente nublado 5.3 No se calcula 59 \n", "17 13/08/2023 7:00 Despejado 4.0 No se calcula 70 \n", "18 13/08/2023 6:00 Despejado 3.1 No se calcula 71 \n", "19 13/08/2023 5:00 Despejado 3.2 No se calcula 71 \n", "20 13/08/2023 4:00 Despejado 3.4 No se calcula 70 \n", "21 13/08/2023 3:00 Despejado 3.7 No se calcula 72 \n", "\n", " Viento dirección Viento velocidad Presión Visibilidad \n", "0 Noroeste 9 km/h 1014.8 hPa 10 km \n", "1 Noroeste 16 km/h 1015.2 hPa 10 km \n", "2 Norte 7 km/h 1015.6 hPa 10 km \n", "3 Norte 11 km/h 1015 hPa 10 km \n", "4 Norte 9 km/h 1015.2 hPa 10 km \n", "5 Norte 13 km/h 1015.6 hPa 10 km \n", "6 Norte 7 km/h 1015.6 hPa 10 km \n", "7 Norte 14 km/h 1016 hPa 10 km \n", "8 Norte 16 km/h 1016.6 hPa 10 km \n", "9 Norte 16 km/h 1017.7 hPa 10 km \n", "10 Norte 13 km/h 1019.4 hPa 10 km \n", "11 Norte 14 km/h 1020.6 hPa 10 km \n", "12 Norte 7 km/h 1021.7 hPa 10 km \n", "13 Noroeste 5 km/h 1023.2 hPa 10 km \n", "14 Norte 9 km/h 1023.3 hPa 10 km \n", "15 Noroeste 7 km/h 1022.9 hPa 10 km \n", "16 Norte 3 km/h 1023.2 hPa 10 km \n", "17 Oeste 3 km/h 1023.2 hPa 10 km \n", "18 Calma NaN 1022.8 hPa 10 km \n", "19 Calma NaN 1022.8 hPa 10 km \n", "20 Calma NaN 1023.3 hPa 10 km \n", "21 Calma NaN 1023.7 hPa 10 km " ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.read_csv(\"buenos_aires_20230813.txt\", sep=\",\", encoding = \"ISO-8859-1\")\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "O también a partir de un fichero Excel: " ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FechaHoraEstadoT (°C)ST (°C)HR (%)Viento direcciónViento velocidadPresiónVisibilidad
02023-08-1400:00:00Nublado12.8No se calcula37Noroeste9 km/h1014.8 hPa10 km
12023-08-1323:00:00Nublado13.0No se calcula37Noroeste16 km/h1015.2 hPa10 km
22023-08-1322:00:00Nublado13.2No se calcula43Norte7 km/h1015.6 hPa10 km
32023-08-1321:00:00Mayormente nublado13.8No se calcula38Norte11 km/h1015 hPa10 km
42023-08-1320:00:00Mayormente nublado14.9No se calcula33Norte9 km/h1015.2 hPa10 km
52023-08-1319:00:00Mayormente nublado14.7No se calcula32Norte13 km/h1015.6 hPa10 km
62023-08-1318:00:00Parcialmente nublado15.6No se calcula26Norte7 km/h1015.6 hPa10 km
72023-08-1317:00:00Parcialmente nublado16.2No se calcula25Norte14 km/h1016 hPa10 km
82023-08-1316:00:00Algo nublado17.2No se calcula25Norte16 km/h1016.6 hPa10 km
92023-08-1315:00:00Algo nublado16.9No se calcula24Norte16 km/h1017.7 hPa10 km
102023-08-1314:00:00Ligeramente nublado16.3No se calcula23Norte13 km/h1019.4 hPa10 km
112023-08-1313:00:00Ligeramente nublado15.2No se calcula25Norte14 km/h1020.6 hPa10 km
122023-08-1312:00:00Ligeramente nublado14.4No se calcula27Norte7 km/h1021.7 hPa10 km
132023-08-1311:00:00Ligeramente nublado12.9No se calcula30Noroeste5 km/h1023.2 hPa10 km
142023-08-1310:00:00Ligeramente nublado10.8No se calcula34Norte9 km/h1023.3 hPa10 km
152023-08-1309:00:00Ligeramente nublado8.67.544Noroeste7 km/h1022.9 hPa10 km
162023-08-1308:00:00Ligeramente nublado5.3No se calcula59Norte3 km/h1023.2 hPa10 km
172023-08-1307:00:00Despejado4.0No se calcula70Oeste3 km/h1023.2 hPa10 km
182023-08-1306:00:00Despejado3.1No se calcula71CalmaNaN1022.8 hPa10 km
192023-08-1305:00:00Despejado3.2No se calcula71CalmaNaN1022.8 hPa10 km
202023-08-1304:00:00Despejado3.4No se calcula70CalmaNaN1023.3 hPa10 km
212023-08-1303:00:00Despejado3.7No se calcula72CalmaNaN1023.7 hPa10 km
\n", "
" ], "text/plain": [ " Fecha Hora Estado T (°C) ST (°C) HR (%) \\\n", "0 2023-08-14 00:00:00 Nublado 12.8 No se calcula 37 \n", "1 2023-08-13 23:00:00 Nublado 13.0 No se calcula 37 \n", "2 2023-08-13 22:00:00 Nublado 13.2 No se calcula 43 \n", "3 2023-08-13 21:00:00 Mayormente nublado 13.8 No se calcula 38 \n", "4 2023-08-13 20:00:00 Mayormente nublado 14.9 No se calcula 33 \n", "5 2023-08-13 19:00:00 Mayormente nublado 14.7 No se calcula 32 \n", "6 2023-08-13 18:00:00 Parcialmente nublado 15.6 No se calcula 26 \n", "7 2023-08-13 17:00:00 Parcialmente nublado 16.2 No se calcula 25 \n", "8 2023-08-13 16:00:00 Algo nublado 17.2 No se calcula 25 \n", "9 2023-08-13 15:00:00 Algo nublado 16.9 No se calcula 24 \n", "10 2023-08-13 14:00:00 Ligeramente nublado 16.3 No se calcula 23 \n", "11 2023-08-13 13:00:00 Ligeramente nublado 15.2 No se calcula 25 \n", "12 2023-08-13 12:00:00 Ligeramente nublado 14.4 No se calcula 27 \n", "13 2023-08-13 11:00:00 Ligeramente nublado 12.9 No se calcula 30 \n", "14 2023-08-13 10:00:00 Ligeramente nublado 10.8 No se calcula 34 \n", "15 2023-08-13 09:00:00 Ligeramente nublado 8.6 7.5 44 \n", "16 2023-08-13 08:00:00 Ligeramente nublado 5.3 No se calcula 59 \n", "17 2023-08-13 07:00:00 Despejado 4.0 No se calcula 70 \n", "18 2023-08-13 06:00:00 Despejado 3.1 No se calcula 71 \n", "19 2023-08-13 05:00:00 Despejado 3.2 No se calcula 71 \n", "20 2023-08-13 04:00:00 Despejado 3.4 No se calcula 70 \n", "21 2023-08-13 03:00:00 Despejado 3.7 No se calcula 72 \n", "\n", " Viento dirección Viento velocidad Presión Visibilidad \n", "0 Noroeste 9 km/h 1014.8 hPa 10 km \n", "1 Noroeste 16 km/h 1015.2 hPa 10 km \n", "2 Norte 7 km/h 1015.6 hPa 10 km \n", "3 Norte 11 km/h 1015 hPa 10 km \n", "4 Norte 9 km/h 1015.2 hPa 10 km \n", "5 Norte 13 km/h 1015.6 hPa 10 km \n", "6 Norte 7 km/h 1015.6 hPa 10 km \n", "7 Norte 14 km/h 1016 hPa 10 km \n", "8 Norte 16 km/h 1016.6 hPa 10 km \n", "9 Norte 16 km/h 1017.7 hPa 10 km \n", "10 Norte 13 km/h 1019.4 hPa 10 km \n", "11 Norte 14 km/h 1020.6 hPa 10 km \n", "12 Norte 7 km/h 1021.7 hPa 10 km \n", "13 Noroeste 5 km/h 1023.2 hPa 10 km \n", "14 Norte 9 km/h 1023.3 hPa 10 km \n", "15 Noroeste 7 km/h 1022.9 hPa 10 km \n", "16 Norte 3 km/h 1023.2 hPa 10 km \n", "17 Oeste 3 km/h 1023.2 hPa 10 km \n", "18 Calma NaN 1022.8 hPa 10 km \n", "19 Calma NaN 1022.8 hPa 10 km \n", "20 Calma NaN 1023.3 hPa 10 km \n", "21 Calma NaN 1023.7 hPa 10 km " ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.read_excel(\"buenos_aires_20230813.xlsx\")\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Indices" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hay una cierta equivalencia entre DataFrames y tablas de una base de datos." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Los índices pueden ser muy útiles cuando haya que seleccionar datos en un gran dataframe, o si hay que unir dos de ellos." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Para crear un índice usaremos la función ``set_index``:" ] }, { "cell_type": "code", "execution_count": 70, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EstacionDatePCP 1hPCP 6hPCP 12hPCP 24h
0Los Platos2023-08-27 12:00:000.07.611.711.7
1Atima2023-08-27 12:00:000.00.10.119.2
2Bomberos-Tegucigalpa2023-08-27 12:00:000.00.07.318.8
\n", "
" ], "text/plain": [ " Estacion Date PCP 1h PCP 6h PCP 12h PCP 24h\n", "0 Los Platos 2023-08-27 12:00:00 0.0 7.6 11.7 11.7\n", "1 Atima 2023-08-27 12:00:00 0.0 0.1 0.1 19.2\n", "2 Bomberos-Tegucigalpa 2023-08-27 12:00:00 0.0 0.0 7.3 18.8" ] }, "execution_count": 70, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.DataFrame({'Estacion':['Los Platos', 'Atima', 'Bomberos-Tegucigalpa'], \n", " 'Date': [datetime(2023,8,27,12), datetime(2023,8,27,12), datetime(2023,8,27,12)],\n", " 'PCP 1h':[0.0, 0.0, 0.0], \n", " 'PCP 6h':[7.6, 0.1, 0.0],\n", " 'PCP 12h':[11.7, 0.1, 7.3],\n", " 'PCP 24h':[11.7, 19.2, 18.8]})\n", "df" ] }, { "cell_type": "code", "execution_count": 65, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EstacionPCP 1hPCP 6hPCP 12hPCP 24h
Date
2023-08-27 12:00:00Los Platos0.07.611.711.7
2023-08-27 12:00:00Atima0.00.10.119.2
2023-08-27 12:00:00Bomberos-Tegucigalpa0.00.07.318.8
\n", "
" ], "text/plain": [ " Estacion PCP 1h PCP 6h PCP 12h PCP 24h\n", "Date \n", "2023-08-27 12:00:00 Los Platos 0.0 7.6 11.7 11.7\n", "2023-08-27 12:00:00 Atima 0.0 0.1 0.1 19.2\n", "2023-08-27 12:00:00 Bomberos-Tegucigalpa 0.0 0.0 7.3 18.8" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.set_index('Date', inplace=True)\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "El índice también se puede definir simultáneamente al crear el dataframe:" ] }, { "cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EstacionPCP 1hPCP 6hPCP 12hPCP 24h
2023-08-27 12:00:00Los Platos0.07.611.711.7
2023-08-27 12:00:00Atima0.00.10.119.2
2023-08-27 12:00:00Bomberos-Tegucigalpa0.00.07.318.8
\n", "
" ], "text/plain": [ " Estacion PCP 1h PCP 6h PCP 12h PCP 24h\n", "2023-08-27 12:00:00 Los Platos 0.0 7.6 11.7 11.7\n", "2023-08-27 12:00:00 Atima 0.0 0.1 0.1 19.2\n", "2023-08-27 12:00:00 Bomberos-Tegucigalpa 0.0 0.0 7.3 18.8" ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.DataFrame({'Estacion':['Los Platos', 'Atima', 'Bomberos-Tegucigalpa'], \n", " 'PCP 1h':[0.0, 0.0, 0.0], \n", " 'PCP 6h':[7.6, 0.1, 0.0],\n", " 'PCP 12h':[11.7, 0.1, 7.3],\n", " 'PCP 24h':[11.7, 19.2, 18.8]},\n", " index = [datetime(2023,8,27,12), datetime(2023,8,27,12), datetime(2023,8,27,12)])\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Para eliminar el índice:" ] }, { "cell_type": "code", "execution_count": 76, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateEstacionPCP 1hPCP 6hPCP 12hPCP 24h
02023-08-27 12:00:00Los Platos0.07.611.711.7
12023-08-27 12:00:00Atima0.00.10.119.2
22023-08-27 12:00:00Bomberos-Tegucigalpa0.00.07.318.8
\n", "
" ], "text/plain": [ " Date Estacion PCP 1h PCP 6h PCP 12h PCP 24h\n", "0 2023-08-27 12:00:00 Los Platos 0.0 7.6 11.7 11.7\n", "1 2023-08-27 12:00:00 Atima 0.0 0.1 0.1 19.2\n", "2 2023-08-27 12:00:00 Bomberos-Tegucigalpa 0.0 0.0 7.3 18.8" ] }, "execution_count": 76, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.reset_index(inplace=True)\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Observar que muchas funciones, como ``set_index``, devuelven un dataframe como salida:" ] }, { "cell_type": "code", "execution_count": 77, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EstacionPCP 1hPCP 6hPCP 12hPCP 24h
Date
2023-08-27 12:00:00Los Platos0.07.611.711.7
2023-08-27 12:00:00Atima0.00.10.119.2
2023-08-27 12:00:00Bomberos-Tegucigalpa0.00.07.318.8
\n", "
" ], "text/plain": [ " Estacion PCP 1h PCP 6h PCP 12h PCP 24h\n", "Date \n", "2023-08-27 12:00:00 Los Platos 0.0 7.6 11.7 11.7\n", "2023-08-27 12:00:00 Atima 0.0 0.1 0.1 19.2\n", "2023-08-27 12:00:00 Bomberos-Tegucigalpa 0.0 0.0 7.3 18.8" ] }, "execution_count": 77, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.set_index('Date')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "pero no modifican el dataframe original:" ] }, { "cell_type": "code", "execution_count": 78, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateEstacionPCP 1hPCP 6hPCP 12hPCP 24h
02023-08-27 12:00:00Los Platos0.07.611.711.7
12023-08-27 12:00:00Atima0.00.10.119.2
22023-08-27 12:00:00Bomberos-Tegucigalpa0.00.07.318.8
\n", "
" ], "text/plain": [ " Date Estacion PCP 1h PCP 6h PCP 12h PCP 24h\n", "0 2023-08-27 12:00:00 Los Platos 0.0 7.6 11.7 11.7\n", "1 2023-08-27 12:00:00 Atima 0.0 0.1 0.1 19.2\n", "2 2023-08-27 12:00:00 Bomberos-Tegucigalpa 0.0 0.0 7.3 18.8" ] }, "execution_count": 78, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Para modificar el dataframe original hay que incluir la opción *inplace* o modificar el propio dataframe:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "df.set_index('Date', inplace=True)\n", "# o:\n", "df = df.set_index('Date', inplace=False) # inplace toma el valor False por defecto" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Es posible crear multiíndices, índices de más de un campo:" ] }, { "cell_type": "code", "execution_count": 81, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PCP 1hPCP 6hPCP 12hPCP 24h
DateEstacion
2023-08-27 12:00:00Los Platos0.07.611.711.7
Atima0.00.10.119.2
Bomberos-Tegucigalpa0.00.07.318.8
\n", "
" ], "text/plain": [ " PCP 1h PCP 6h PCP 12h PCP 24h\n", "Date Estacion \n", "2023-08-27 12:00:00 Los Platos 0.0 7.6 11.7 11.7\n", " Atima 0.0 0.1 0.1 19.2\n", " Bomberos-Tegucigalpa 0.0 0.0 7.3 18.8" ] }, "execution_count": 81, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = df.set_index(['Date', 'Estacion'])\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Manejo de series temporales" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "La función ``date_range`` resulta muy útil para crear rangos de fechas:" ] }, { "cell_type": "code", "execution_count": 79, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DatetimeIndex(['2023-08-01', '2023-08-02', '2023-08-03'], dtype='datetime64[ns]', freq='D')" ] }, "execution_count": 79, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.date_range(\"20230801\", \"20230803\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "o en un formato string:" ] }, { "cell_type": "code", "execution_count": 105, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['2023-08-01', '2023-08-02', '2023-08-03']" ] }, "execution_count": 105, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.date_range(start=\"20230801\", end=\"20230803\").format()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Entre otras cosas, se puede modificar la frecuencia:" ] }, { "cell_type": "code", "execution_count": 106, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['2023-08-01 00:00:00',\n", " '2023-08-01 06:00:00',\n", " '2023-08-01 12:00:00',\n", " '2023-08-01 18:00:00',\n", " '2023-08-02 00:00:00',\n", " '2023-08-02 06:00:00',\n", " '2023-08-02 12:00:00',\n", " '2023-08-02 18:00:00',\n", " '2023-08-03 00:00:00']" ] }, "execution_count": 106, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.date_range(\"20230801\", \"20230803\", freq=\"6H\").format()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "En meteorología, es muy común tener datos ordenados por fechas. Pandas se adapta muy bien a esta necesidad, y nos permite utilizar la fecha como índice de nuestros DataFrames. De hecho dispone de un objeto específico para ello, el DataTimeIndex:" ] }, { "cell_type": "code", "execution_count": 107, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Tmax
2023-08-0120.3
2023-08-0221.5
2023-08-0320.1
2023-08-0422.0
\n", "
" ], "text/plain": [ " Tmax\n", "2023-08-01 20.3\n", "2023-08-02 21.5\n", "2023-08-03 20.1\n", "2023-08-04 22.0" ] }, "execution_count": 107, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.DataFrame({'Tmax':[20.3, 21.5, 20.1, 22.0]},\n", " index = pd.date_range(\"20230801\", \"20230804\"))\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "El índice es un objeto DataTimeIndex:" ] }, { "cell_type": "code", "execution_count": 108, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DatetimeIndex(['2023-08-01', '2023-08-02', '2023-08-03', '2023-08-04'], dtype='datetime64[ns]', freq='D')" ] }, "execution_count": 108, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.index" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "que tiene sus métodos específicos, por ejemplo:" ] }, { "cell_type": "code", "execution_count": 110, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Int64Index([8, 8, 8, 8], dtype='int64')\n", "Int64Index([1, 2, 3, 4], dtype='int64')\n" ] } ], "source": [ "print(df.index.month)\n", "print(df.index.day)" ] }, { "cell_type": "code", "execution_count": 111, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "DatetimeIndex(['2023-08-01', '2023-08-02', '2023-08-03', '2023-08-04'], dtype='datetime64[ns]', freq='D')\n" ] } ], "source": [ "print(df.index)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Visualización de las características de un DataFrame" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Para manejar adecuadamente un dataframe debemos conocer sus características: qué columnas tiene, qué tipo de datos almacena, etc.\n", "Hay varias propiedades y métodos que nos dan esa información." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Creemos un dataframe a partir del fichero csv de Buenos Aires, tomando como índice la fecha y la hora (más adelante veremos cómo se combinan estos dos campos en uno):" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "df = pd.read_csv(\"buenos_aires_20230813.txt\", parse_dates=[['Fecha', 'Hora']], \n", " sep=\",\", encoding = \"ISO-8859-1\")\n", "df = df.set_index('Fecha_Hora')" ] }, { "cell_type": "code", "execution_count": 113, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EstadoT (°C)ST (°C)HR (%)Viento direcciónViento velocidadPresiónVisibilidad
Fecha_Hora
2023-08-14 00:00:00Nublado12.8No se calcula37Noroeste9 km/h1014.8 hPa10 km
2023-08-13 23:00:00Nublado13.0No se calcula37Noroeste16 km/h1015.2 hPa10 km
2023-08-13 22:00:00Nublado13.2No se calcula43Norte7 km/h1015.6 hPa10 km
2023-08-13 21:00:00Mayormente nublado13.8No se calcula38Norte11 km/h1015 hPa10 km
2023-08-13 20:00:00Mayormente nublado14.9No se calcula33Norte9 km/h1015.2 hPa10 km
2023-08-13 19:00:00Mayormente nublado14.7No se calcula32Norte13 km/h1015.6 hPa10 km
2023-08-13 18:00:00Parcialmente nublado15.6No se calcula26Norte7 km/h1015.6 hPa10 km
2023-08-13 17:00:00Parcialmente nublado16.2No se calcula25Norte14 km/h1016 hPa10 km
2023-08-13 16:00:00Algo nublado17.2No se calcula25Norte16 km/h1016.6 hPa10 km
2023-08-13 15:00:00Algo nublado16.9No se calcula24Norte16 km/h1017.7 hPa10 km
2023-08-13 14:00:00Ligeramente nublado16.3No se calcula23Norte13 km/h1019.4 hPa10 km
2023-08-13 13:00:00Ligeramente nublado15.2No se calcula25Norte14 km/h1020.6 hPa10 km
2023-08-13 12:00:00Ligeramente nublado14.4No se calcula27Norte7 km/h1021.7 hPa10 km
2023-08-13 11:00:00Ligeramente nublado12.9No se calcula30Noroeste5 km/h1023.2 hPa10 km
2023-08-13 10:00:00Ligeramente nublado10.8No se calcula34Norte9 km/h1023.3 hPa10 km
2023-08-13 09:00:00Ligeramente nublado8.67.544Noroeste7 km/h1022.9 hPa10 km
2023-08-13 08:00:00Ligeramente nublado5.3No se calcula59Norte3 km/h1023.2 hPa10 km
2023-08-13 07:00:00Despejado4.0No se calcula70Oeste3 km/h1023.2 hPa10 km
2023-08-13 06:00:00Despejado3.1No se calcula71CalmaNaN1022.8 hPa10 km
2023-08-13 05:00:00Despejado3.2No se calcula71CalmaNaN1022.8 hPa10 km
2023-08-13 04:00:00Despejado3.4No se calcula70CalmaNaN1023.3 hPa10 km
2023-08-13 03:00:00Despejado3.7No se calcula72CalmaNaN1023.7 hPa10 km
\n", "
" ], "text/plain": [ " Estado T (°C) ST (°C) HR (%) \\\n", "Fecha_Hora \n", "2023-08-14 00:00:00 Nublado 12.8 No se calcula 37 \n", "2023-08-13 23:00:00 Nublado 13.0 No se calcula 37 \n", "2023-08-13 22:00:00 Nublado 13.2 No se calcula 43 \n", "2023-08-13 21:00:00 Mayormente nublado 13.8 No se calcula 38 \n", "2023-08-13 20:00:00 Mayormente nublado 14.9 No se calcula 33 \n", "2023-08-13 19:00:00 Mayormente nublado 14.7 No se calcula 32 \n", "2023-08-13 18:00:00 Parcialmente nublado 15.6 No se calcula 26 \n", "2023-08-13 17:00:00 Parcialmente nublado 16.2 No se calcula 25 \n", "2023-08-13 16:00:00 Algo nublado 17.2 No se calcula 25 \n", "2023-08-13 15:00:00 Algo nublado 16.9 No se calcula 24 \n", "2023-08-13 14:00:00 Ligeramente nublado 16.3 No se calcula 23 \n", "2023-08-13 13:00:00 Ligeramente nublado 15.2 No se calcula 25 \n", "2023-08-13 12:00:00 Ligeramente nublado 14.4 No se calcula 27 \n", "2023-08-13 11:00:00 Ligeramente nublado 12.9 No se calcula 30 \n", "2023-08-13 10:00:00 Ligeramente nublado 10.8 No se calcula 34 \n", "2023-08-13 09:00:00 Ligeramente nublado 8.6 7.5 44 \n", "2023-08-13 08:00:00 Ligeramente nublado 5.3 No se calcula 59 \n", "2023-08-13 07:00:00 Despejado 4.0 No se calcula 70 \n", "2023-08-13 06:00:00 Despejado 3.1 No se calcula 71 \n", "2023-08-13 05:00:00 Despejado 3.2 No se calcula 71 \n", "2023-08-13 04:00:00 Despejado 3.4 No se calcula 70 \n", "2023-08-13 03:00:00 Despejado 3.7 No se calcula 72 \n", "\n", " Viento dirección Viento velocidad Presión Visibilidad \n", "Fecha_Hora \n", "2023-08-14 00:00:00 Noroeste 9 km/h 1014.8 hPa 10 km \n", "2023-08-13 23:00:00 Noroeste 16 km/h 1015.2 hPa 10 km \n", "2023-08-13 22:00:00 Norte 7 km/h 1015.6 hPa 10 km \n", "2023-08-13 21:00:00 Norte 11 km/h 1015 hPa 10 km \n", "2023-08-13 20:00:00 Norte 9 km/h 1015.2 hPa 10 km \n", "2023-08-13 19:00:00 Norte 13 km/h 1015.6 hPa 10 km \n", "2023-08-13 18:00:00 Norte 7 km/h 1015.6 hPa 10 km \n", "2023-08-13 17:00:00 Norte 14 km/h 1016 hPa 10 km \n", "2023-08-13 16:00:00 Norte 16 km/h 1016.6 hPa 10 km \n", "2023-08-13 15:00:00 Norte 16 km/h 1017.7 hPa 10 km \n", "2023-08-13 14:00:00 Norte 13 km/h 1019.4 hPa 10 km \n", "2023-08-13 13:00:00 Norte 14 km/h 1020.6 hPa 10 km \n", "2023-08-13 12:00:00 Norte 7 km/h 1021.7 hPa 10 km \n", "2023-08-13 11:00:00 Noroeste 5 km/h 1023.2 hPa 10 km \n", "2023-08-13 10:00:00 Norte 9 km/h 1023.3 hPa 10 km \n", "2023-08-13 09:00:00 Noroeste 7 km/h 1022.9 hPa 10 km \n", "2023-08-13 08:00:00 Norte 3 km/h 1023.2 hPa 10 km \n", "2023-08-13 07:00:00 Oeste 3 km/h 1023.2 hPa 10 km \n", "2023-08-13 06:00:00 Calma NaN 1022.8 hPa 10 km \n", "2023-08-13 05:00:00 Calma NaN 1022.8 hPa 10 km \n", "2023-08-13 04:00:00 Calma NaN 1023.3 hPa 10 km \n", "2023-08-13 03:00:00 Calma NaN 1023.7 hPa 10 km " ] }, "execution_count": 113, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Como ya hemos visto, para mostrar el índice del dataframe escribiremos:" ] }, { "cell_type": "code", "execution_count": 114, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DatetimeIndex(['2023-08-14 00:00:00', '2023-08-13 23:00:00',\n", " '2023-08-13 22:00:00', '2023-08-13 21:00:00',\n", " '2023-08-13 20:00:00', '2023-08-13 19:00:00',\n", " '2023-08-13 18:00:00', '2023-08-13 17:00:00',\n", " '2023-08-13 16:00:00', '2023-08-13 15:00:00',\n", " '2023-08-13 14:00:00', '2023-08-13 13:00:00',\n", " '2023-08-13 12:00:00', '2023-08-13 11:00:00',\n", " '2023-08-13 10:00:00', '2023-08-13 09:00:00',\n", " '2023-08-13 08:00:00', '2023-08-13 07:00:00',\n", " '2023-08-13 06:00:00', '2023-08-13 05:00:00',\n", " '2023-08-13 04:00:00', '2023-08-13 03:00:00'],\n", " dtype='datetime64[ns]', name='Fecha_Hora', freq=None)" ] }, "execution_count": 114, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.index" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*columns* devuelve una lista con el nombre de cada columna (por cierto, es un objeto índice). Observar que el índice ya no se considera una columna:" ] }, { "cell_type": "code", "execution_count": 115, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Index(['Estado', 'T (°C)', 'ST (°C)', 'HR (%)', 'Viento dirección',\n", " 'Viento velocidad', 'Presión', 'Visibilidad'],\n", " dtype='object')\n", "HR (%)\n" ] } ], "source": [ "print(df.columns)\n", "print(df.columns[3])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*dtypes* da información sobre el tipo de dato de cada columna:" ] }, { "cell_type": "code", "execution_count": 116, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Estado object\n", "T (°C) float64\n", "ST (°C) object\n", "HR (%) int64\n", "Viento dirección object\n", "Viento velocidad object\n", "Presión object\n", "Visibilidad object\n", "dtype: object" ] }, "execution_count": 116, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.dtypes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*values* devuelve el dataframe en forma de array de numpy" ] }, { "cell_type": "code", "execution_count": 117, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[['Nublado' 12.8 'No se calcula' 37 'Noroeste' '9 km/h' '1014.8 hPa'\n", " '10 km']\n", " ['Nublado' 13.0 'No se calcula' 37 'Noroeste' '16 km/h' '1015.2 hPa'\n", " '10 km']\n", " ['Nublado' 13.2 'No se calcula' 43 'Norte' '7 km/h' '1015.6 hPa' '10 km']\n", " ['Mayormente nublado' 13.8 'No se calcula' 38 'Norte' '11 km/h'\n", " '1015 hPa' '10 km']\n", " ['Mayormente nublado' 14.9 'No se calcula' 33 'Norte' '9 km/h'\n", " '1015.2 hPa' '10 km']\n", " ['Mayormente nublado' 14.7 'No se calcula' 32 'Norte' '13 km/h'\n", " '1015.6 hPa' '10 km']\n", " ['Parcialmente nublado' 15.6 'No se calcula' 26 'Norte' '7 km/h'\n", " '1015.6 hPa' '10 km']\n", " ['Parcialmente nublado' 16.2 'No se calcula' 25 'Norte' '14 km/h'\n", " '1016 hPa' '10 km']\n", " ['Algo nublado' 17.2 'No se calcula' 25 'Norte' '16 km/h' '1016.6 hPa'\n", " '10 km']\n", " ['Algo nublado' 16.9 'No se calcula' 24 'Norte' '16 km/h' '1017.7 hPa'\n", " '10 km']\n", " ['Ligeramente nublado' 16.3 'No se calcula' 23 'Norte' '13 km/h'\n", " '1019.4 hPa' '10 km']\n", " ['Ligeramente nublado' 15.2 'No se calcula' 25 'Norte' '14 km/h'\n", " '1020.6 hPa' '10 km']\n", " ['Ligeramente nublado' 14.4 'No se calcula' 27 'Norte' '7 km/h'\n", " '1021.7 hPa' '10 km']\n", " ['Ligeramente nublado' 12.9 'No se calcula' 30 'Noroeste' '5 km/h'\n", " '1023.2 hPa' '10 km']\n", " ['Ligeramente nublado' 10.8 'No se calcula' 34 'Norte' '9 km/h'\n", " '1023.3 hPa' '10 km']\n", " ['Ligeramente nublado' 8.6 '7.5' 44 'Noroeste' '7 km/h' '1022.9 hPa'\n", " '10 km']\n", " ['Ligeramente nublado' 5.3 'No se calcula' 59 'Norte' '3 km/h'\n", " '1023.2 hPa' '10 km']\n", " ['Despejado' 4.0 'No se calcula' 70 'Oeste' '3 km/h' '1023.2 hPa'\n", " '10 km']\n", " ['Despejado' 3.1 'No se calcula' 71 'Calma' nan '1022.8 hPa' '10 km']\n", " ['Despejado' 3.2 'No se calcula' 71 'Calma' nan '1022.8 hPa' '10 km']\n", " ['Despejado' 3.4 'No se calcula' 70 'Calma' nan '1023.3 hPa' '10 km']\n", " ['Despejado' 3.7 'No se calcula' 72 'Calma' nan '1023.7 hPa' '10 km']]\n", "\n" ] } ], "source": [ "print(df.values)\n", "print(type(df.values))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "``describe`` es un método que da un resumen de varios estadísticos para el dataframe:" ] }, { "cell_type": "code", "execution_count": 118, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
T (°C)HR (%)
count22.00000022.000000
mean11.32727341.636364
std5.11954118.164711
min3.10000023.000000
25%6.12500026.250000
50%13.10000035.500000
75%15.12500055.250000
max17.20000072.000000
\n", "
" ], "text/plain": [ " T (°C) HR (%)\n", "count 22.000000 22.000000\n", "mean 11.327273 41.636364\n", "std 5.119541 18.164711\n", "min 3.100000 23.000000\n", "25% 6.125000 26.250000\n", "50% 13.100000 35.500000\n", "75% 15.125000 55.250000\n", "max 17.200000 72.000000" ] }, "execution_count": 118, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.describe()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Cada uno de estos estadísticos es un método del dataframe:" ] }, { "cell_type": "code", "execution_count": 119, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Estado 22\n", "T (°C) 22\n", "ST (°C) 22\n", "HR (%) 22\n", "Viento dirección 22\n", "Viento velocidad 18\n", "Presión 22\n", "Visibilidad 22\n", "dtype: int64" ] }, "execution_count": 119, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.count()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hay más estadísticos disponibles:" ] }, { "cell_type": "code", "execution_count": 121, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "T (°C) 13.1\n", "HR (%) 35.5\n", "Name: 0.5, dtype: float64" ] }, "execution_count": 121, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.quantile(0.5)" ] }, { "cell_type": "code", "execution_count": 122, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Fecha_Hora\n", "2023-08-14 00:00:00 28.9172\n", "2023-08-13 23:00:00 28.9840\n", "2023-08-13 22:00:00 33.0468\n", "2023-08-13 21:00:00 29.9172\n", "2023-08-13 20:00:00 26.9546\n", "2023-08-13 19:00:00 26.2218\n", "2023-08-13 18:00:00 22.5264\n", "2023-08-13 17:00:00 22.0608\n", "2023-08-13 16:00:00 22.3948\n", "2023-08-13 15:00:00 21.6286\n", "2023-08-13 14:00:00 20.7622\n", "2023-08-13 13:00:00 21.7268\n", "2023-08-13 12:00:00 22.7916\n", "2023-08-13 11:00:00 24.2886\n", "2023-08-13 10:00:00 26.2512\n", "2023-08-13 09:00:00 32.1764\n", "2023-08-13 08:00:00 41.0642\n", "2023-08-13 07:00:00 47.9560\n", "2023-08-13 06:00:00 48.3214\n", "2023-08-13 05:00:00 48.3548\n", "2023-08-13 04:00:00 47.7556\n", "2023-08-13 03:00:00 49.1878\n", "Name: 0.666, dtype: float64" ] }, "execution_count": 122, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.quantile(0.666, axis=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hay otras operaciones sencillas que nos pueden resultar útiles. La traspuesta (``T``):" ] }, { "cell_type": "code", "execution_count": 123, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Fecha_Hora2023-08-14 00:00:002023-08-13 23:00:002023-08-13 22:00:002023-08-13 21:00:002023-08-13 20:00:002023-08-13 19:00:002023-08-13 18:00:002023-08-13 17:00:002023-08-13 16:00:002023-08-13 15:00:00...2023-08-13 12:00:002023-08-13 11:00:002023-08-13 10:00:002023-08-13 09:00:002023-08-13 08:00:002023-08-13 07:00:002023-08-13 06:00:002023-08-13 05:00:002023-08-13 04:00:002023-08-13 03:00:00
EstadoNubladoNubladoNubladoMayormente nubladoMayormente nubladoMayormente nubladoParcialmente nubladoParcialmente nubladoAlgo nubladoAlgo nublado...Ligeramente nubladoLigeramente nubladoLigeramente nubladoLigeramente nubladoLigeramente nubladoDespejadoDespejadoDespejadoDespejadoDespejado
T (°C)12.813.013.213.814.914.715.616.217.216.9...14.412.910.88.65.34.03.13.23.43.7
ST (°C)No se calculaNo se calculaNo se calculaNo se calculaNo se calculaNo se calculaNo se calculaNo se calculaNo se calculaNo se calcula...No se calculaNo se calculaNo se calcula7.5No se calculaNo se calculaNo se calculaNo se calculaNo se calculaNo se calcula
HR (%)37374338333226252524...27303444597071717072
Viento direcciónNoroesteNoroesteNorteNorteNorteNorteNorteNorteNorteNorte...NorteNoroesteNorteNoroesteNorteOesteCalmaCalmaCalmaCalma
Viento velocidad9 km/h16 km/h7 km/h11 km/h9 km/h13 km/h7 km/h14 km/h16 km/h16 km/h...7 km/h5 km/h9 km/h7 km/h3 km/h3 km/hNaNNaNNaNNaN
Presión1014.8 hPa1015.2 hPa1015.6 hPa1015 hPa1015.2 hPa1015.6 hPa1015.6 hPa1016 hPa1016.6 hPa1017.7 hPa...1021.7 hPa1023.2 hPa1023.3 hPa1022.9 hPa1023.2 hPa1023.2 hPa1022.8 hPa1022.8 hPa1023.3 hPa1023.7 hPa
Visibilidad10 km10 km10 km10 km10 km10 km10 km10 km10 km10 km...10 km10 km10 km10 km10 km10 km10 km10 km10 km10 km
\n", "

8 rows × 22 columns

\n", "
" ], "text/plain": [ "Fecha_Hora 2023-08-14 00:00:00 2023-08-13 23:00:00 2023-08-13 22:00:00 \\\n", "Estado Nublado Nublado Nublado \n", "T (°C) 12.8 13.0 13.2 \n", "ST (°C) No se calcula No se calcula No se calcula \n", "HR (%) 37 37 43 \n", "Viento dirección Noroeste Noroeste Norte \n", "Viento velocidad 9 km/h 16 km/h 7 km/h \n", "Presión 1014.8 hPa 1015.2 hPa 1015.6 hPa \n", "Visibilidad 10 km 10 km 10 km \n", "\n", "Fecha_Hora 2023-08-13 21:00:00 2023-08-13 20:00:00 2023-08-13 19:00:00 \\\n", "Estado Mayormente nublado Mayormente nublado Mayormente nublado \n", "T (°C) 13.8 14.9 14.7 \n", "ST (°C) No se calcula No se calcula No se calcula \n", "HR (%) 38 33 32 \n", "Viento dirección Norte Norte Norte \n", "Viento velocidad 11 km/h 9 km/h 13 km/h \n", "Presión 1015 hPa 1015.2 hPa 1015.6 hPa \n", "Visibilidad 10 km 10 km 10 km \n", "\n", "Fecha_Hora 2023-08-13 18:00:00 2023-08-13 17:00:00 \\\n", "Estado Parcialmente nublado Parcialmente nublado \n", "T (°C) 15.6 16.2 \n", "ST (°C) No se calcula No se calcula \n", "HR (%) 26 25 \n", "Viento dirección Norte Norte \n", "Viento velocidad 7 km/h 14 km/h \n", "Presión 1015.6 hPa 1016 hPa \n", "Visibilidad 10 km 10 km \n", "\n", "Fecha_Hora 2023-08-13 16:00:00 2023-08-13 15:00:00 ... \\\n", "Estado Algo nublado Algo nublado ... \n", "T (°C) 17.2 16.9 ... \n", "ST (°C) No se calcula No se calcula ... \n", "HR (%) 25 24 ... \n", "Viento dirección Norte Norte ... \n", "Viento velocidad 16 km/h 16 km/h ... \n", "Presión 1016.6 hPa 1017.7 hPa ... \n", "Visibilidad 10 km 10 km ... \n", "\n", "Fecha_Hora 2023-08-13 12:00:00 2023-08-13 11:00:00 \\\n", "Estado Ligeramente nublado Ligeramente nublado \n", "T (°C) 14.4 12.9 \n", "ST (°C) No se calcula No se calcula \n", "HR (%) 27 30 \n", "Viento dirección Norte Noroeste \n", "Viento velocidad 7 km/h 5 km/h \n", "Presión 1021.7 hPa 1023.2 hPa \n", "Visibilidad 10 km 10 km \n", "\n", "Fecha_Hora 2023-08-13 10:00:00 2023-08-13 09:00:00 \\\n", "Estado Ligeramente nublado Ligeramente nublado \n", "T (°C) 10.8 8.6 \n", "ST (°C) No se calcula 7.5 \n", "HR (%) 34 44 \n", "Viento dirección Norte Noroeste \n", "Viento velocidad 9 km/h 7 km/h \n", "Presión 1023.3 hPa 1022.9 hPa \n", "Visibilidad 10 km 10 km \n", "\n", "Fecha_Hora 2023-08-13 08:00:00 2023-08-13 07:00:00 2023-08-13 06:00:00 \\\n", "Estado Ligeramente nublado Despejado Despejado \n", "T (°C) 5.3 4.0 3.1 \n", "ST (°C) No se calcula No se calcula No se calcula \n", "HR (%) 59 70 71 \n", "Viento dirección Norte Oeste Calma \n", "Viento velocidad 3 km/h 3 km/h NaN \n", "Presión 1023.2 hPa 1023.2 hPa 1022.8 hPa \n", "Visibilidad 10 km 10 km 10 km \n", "\n", "Fecha_Hora 2023-08-13 05:00:00 2023-08-13 04:00:00 2023-08-13 03:00:00 \n", "Estado Despejado Despejado Despejado \n", "T (°C) 3.2 3.4 3.7 \n", "ST (°C) No se calcula No se calcula No se calcula \n", "HR (%) 71 70 72 \n", "Viento dirección Calma Calma Calma \n", "Viento velocidad NaN NaN NaN \n", "Presión 1022.8 hPa 1023.3 hPa 1023.7 hPa \n", "Visibilidad 10 km 10 km 10 km \n", "\n", "[8 rows x 22 columns]" ] }, "execution_count": 123, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.T" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Y ordenar, ya sea por índice o por columna (``sort_index`` y ``sort_values`` respectivamente). Recordar que sort_index no cambia el dataframe, a no ser que añadamos la opción inplace=True" ] }, { "cell_type": "code", "execution_count": 125, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EstadoT (°C)ST (°C)HR (%)Viento direcciónViento velocidadPresiónVisibilidad
Fecha_Hora
2023-08-13 03:00:00Despejado3.7No se calcula72CalmaNaN1023.7 hPa10 km
2023-08-13 04:00:00Despejado3.4No se calcula70CalmaNaN1023.3 hPa10 km
2023-08-13 05:00:00Despejado3.2No se calcula71CalmaNaN1022.8 hPa10 km
2023-08-13 06:00:00Despejado3.1No se calcula71CalmaNaN1022.8 hPa10 km
2023-08-13 07:00:00Despejado4.0No se calcula70Oeste3 km/h1023.2 hPa10 km
2023-08-13 08:00:00Ligeramente nublado5.3No se calcula59Norte3 km/h1023.2 hPa10 km
2023-08-13 09:00:00Ligeramente nublado8.67.544Noroeste7 km/h1022.9 hPa10 km
2023-08-13 10:00:00Ligeramente nublado10.8No se calcula34Norte9 km/h1023.3 hPa10 km
2023-08-13 11:00:00Ligeramente nublado12.9No se calcula30Noroeste5 km/h1023.2 hPa10 km
2023-08-13 12:00:00Ligeramente nublado14.4No se calcula27Norte7 km/h1021.7 hPa10 km
2023-08-13 13:00:00Ligeramente nublado15.2No se calcula25Norte14 km/h1020.6 hPa10 km
2023-08-13 14:00:00Ligeramente nublado16.3No se calcula23Norte13 km/h1019.4 hPa10 km
2023-08-13 15:00:00Algo nublado16.9No se calcula24Norte16 km/h1017.7 hPa10 km
2023-08-13 16:00:00Algo nublado17.2No se calcula25Norte16 km/h1016.6 hPa10 km
2023-08-13 17:00:00Parcialmente nublado16.2No se calcula25Norte14 km/h1016 hPa10 km
2023-08-13 18:00:00Parcialmente nublado15.6No se calcula26Norte7 km/h1015.6 hPa10 km
2023-08-13 19:00:00Mayormente nublado14.7No se calcula32Norte13 km/h1015.6 hPa10 km
2023-08-13 20:00:00Mayormente nublado14.9No se calcula33Norte9 km/h1015.2 hPa10 km
2023-08-13 21:00:00Mayormente nublado13.8No se calcula38Norte11 km/h1015 hPa10 km
2023-08-13 22:00:00Nublado13.2No se calcula43Norte7 km/h1015.6 hPa10 km
2023-08-13 23:00:00Nublado13.0No se calcula37Noroeste16 km/h1015.2 hPa10 km
2023-08-14 00:00:00Nublado12.8No se calcula37Noroeste9 km/h1014.8 hPa10 km
\n", "
" ], "text/plain": [ " Estado T (°C) ST (°C) HR (%) \\\n", "Fecha_Hora \n", "2023-08-13 03:00:00 Despejado 3.7 No se calcula 72 \n", "2023-08-13 04:00:00 Despejado 3.4 No se calcula 70 \n", "2023-08-13 05:00:00 Despejado 3.2 No se calcula 71 \n", "2023-08-13 06:00:00 Despejado 3.1 No se calcula 71 \n", "2023-08-13 07:00:00 Despejado 4.0 No se calcula 70 \n", "2023-08-13 08:00:00 Ligeramente nublado 5.3 No se calcula 59 \n", "2023-08-13 09:00:00 Ligeramente nublado 8.6 7.5 44 \n", "2023-08-13 10:00:00 Ligeramente nublado 10.8 No se calcula 34 \n", "2023-08-13 11:00:00 Ligeramente nublado 12.9 No se calcula 30 \n", "2023-08-13 12:00:00 Ligeramente nublado 14.4 No se calcula 27 \n", "2023-08-13 13:00:00 Ligeramente nublado 15.2 No se calcula 25 \n", "2023-08-13 14:00:00 Ligeramente nublado 16.3 No se calcula 23 \n", "2023-08-13 15:00:00 Algo nublado 16.9 No se calcula 24 \n", "2023-08-13 16:00:00 Algo nublado 17.2 No se calcula 25 \n", "2023-08-13 17:00:00 Parcialmente nublado 16.2 No se calcula 25 \n", "2023-08-13 18:00:00 Parcialmente nublado 15.6 No se calcula 26 \n", "2023-08-13 19:00:00 Mayormente nublado 14.7 No se calcula 32 \n", "2023-08-13 20:00:00 Mayormente nublado 14.9 No se calcula 33 \n", "2023-08-13 21:00:00 Mayormente nublado 13.8 No se calcula 38 \n", "2023-08-13 22:00:00 Nublado 13.2 No se calcula 43 \n", "2023-08-13 23:00:00 Nublado 13.0 No se calcula 37 \n", "2023-08-14 00:00:00 Nublado 12.8 No se calcula 37 \n", "\n", " Viento dirección Viento velocidad Presión Visibilidad \n", "Fecha_Hora \n", "2023-08-13 03:00:00 Calma NaN 1023.7 hPa 10 km \n", "2023-08-13 04:00:00 Calma NaN 1023.3 hPa 10 km \n", "2023-08-13 05:00:00 Calma NaN 1022.8 hPa 10 km \n", "2023-08-13 06:00:00 Calma NaN 1022.8 hPa 10 km \n", "2023-08-13 07:00:00 Oeste 3 km/h 1023.2 hPa 10 km \n", "2023-08-13 08:00:00 Norte 3 km/h 1023.2 hPa 10 km \n", "2023-08-13 09:00:00 Noroeste 7 km/h 1022.9 hPa 10 km \n", "2023-08-13 10:00:00 Norte 9 km/h 1023.3 hPa 10 km \n", "2023-08-13 11:00:00 Noroeste 5 km/h 1023.2 hPa 10 km \n", "2023-08-13 12:00:00 Norte 7 km/h 1021.7 hPa 10 km \n", "2023-08-13 13:00:00 Norte 14 km/h 1020.6 hPa 10 km \n", "2023-08-13 14:00:00 Norte 13 km/h 1019.4 hPa 10 km \n", "2023-08-13 15:00:00 Norte 16 km/h 1017.7 hPa 10 km \n", "2023-08-13 16:00:00 Norte 16 km/h 1016.6 hPa 10 km \n", "2023-08-13 17:00:00 Norte 14 km/h 1016 hPa 10 km \n", "2023-08-13 18:00:00 Norte 7 km/h 1015.6 hPa 10 km \n", "2023-08-13 19:00:00 Norte 13 km/h 1015.6 hPa 10 km \n", "2023-08-13 20:00:00 Norte 9 km/h 1015.2 hPa 10 km \n", "2023-08-13 21:00:00 Norte 11 km/h 1015 hPa 10 km \n", "2023-08-13 22:00:00 Norte 7 km/h 1015.6 hPa 10 km \n", "2023-08-13 23:00:00 Noroeste 16 km/h 1015.2 hPa 10 km \n", "2023-08-14 00:00:00 Noroeste 9 km/h 1014.8 hPa 10 km " ] }, "execution_count": 125, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.sort_index()" ] }, { "cell_type": "code", "execution_count": 126, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EstadoT (°C)ST (°C)HR (%)Viento direcciónViento velocidadPresiónVisibilidad
Fecha_Hora
2023-08-13 06:00:00Despejado3.1No se calcula71CalmaNaN1022.8 hPa10 km
2023-08-13 05:00:00Despejado3.2No se calcula71CalmaNaN1022.8 hPa10 km
2023-08-13 04:00:00Despejado3.4No se calcula70CalmaNaN1023.3 hPa10 km
2023-08-13 03:00:00Despejado3.7No se calcula72CalmaNaN1023.7 hPa10 km
2023-08-13 07:00:00Despejado4.0No se calcula70Oeste3 km/h1023.2 hPa10 km
2023-08-13 08:00:00Ligeramente nublado5.3No se calcula59Norte3 km/h1023.2 hPa10 km
2023-08-13 09:00:00Ligeramente nublado8.67.544Noroeste7 km/h1022.9 hPa10 km
2023-08-13 10:00:00Ligeramente nublado10.8No se calcula34Norte9 km/h1023.3 hPa10 km
2023-08-14 00:00:00Nublado12.8No se calcula37Noroeste9 km/h1014.8 hPa10 km
2023-08-13 11:00:00Ligeramente nublado12.9No se calcula30Noroeste5 km/h1023.2 hPa10 km
2023-08-13 23:00:00Nublado13.0No se calcula37Noroeste16 km/h1015.2 hPa10 km
2023-08-13 22:00:00Nublado13.2No se calcula43Norte7 km/h1015.6 hPa10 km
2023-08-13 21:00:00Mayormente nublado13.8No se calcula38Norte11 km/h1015 hPa10 km
2023-08-13 12:00:00Ligeramente nublado14.4No se calcula27Norte7 km/h1021.7 hPa10 km
2023-08-13 19:00:00Mayormente nublado14.7No se calcula32Norte13 km/h1015.6 hPa10 km
2023-08-13 20:00:00Mayormente nublado14.9No se calcula33Norte9 km/h1015.2 hPa10 km
2023-08-13 13:00:00Ligeramente nublado15.2No se calcula25Norte14 km/h1020.6 hPa10 km
2023-08-13 18:00:00Parcialmente nublado15.6No se calcula26Norte7 km/h1015.6 hPa10 km
2023-08-13 17:00:00Parcialmente nublado16.2No se calcula25Norte14 km/h1016 hPa10 km
2023-08-13 14:00:00Ligeramente nublado16.3No se calcula23Norte13 km/h1019.4 hPa10 km
2023-08-13 15:00:00Algo nublado16.9No se calcula24Norte16 km/h1017.7 hPa10 km
2023-08-13 16:00:00Algo nublado17.2No se calcula25Norte16 km/h1016.6 hPa10 km
\n", "
" ], "text/plain": [ " Estado T (°C) ST (°C) HR (%) \\\n", "Fecha_Hora \n", "2023-08-13 06:00:00 Despejado 3.1 No se calcula 71 \n", "2023-08-13 05:00:00 Despejado 3.2 No se calcula 71 \n", "2023-08-13 04:00:00 Despejado 3.4 No se calcula 70 \n", "2023-08-13 03:00:00 Despejado 3.7 No se calcula 72 \n", "2023-08-13 07:00:00 Despejado 4.0 No se calcula 70 \n", "2023-08-13 08:00:00 Ligeramente nublado 5.3 No se calcula 59 \n", "2023-08-13 09:00:00 Ligeramente nublado 8.6 7.5 44 \n", "2023-08-13 10:00:00 Ligeramente nublado 10.8 No se calcula 34 \n", "2023-08-14 00:00:00 Nublado 12.8 No se calcula 37 \n", "2023-08-13 11:00:00 Ligeramente nublado 12.9 No se calcula 30 \n", "2023-08-13 23:00:00 Nublado 13.0 No se calcula 37 \n", "2023-08-13 22:00:00 Nublado 13.2 No se calcula 43 \n", "2023-08-13 21:00:00 Mayormente nublado 13.8 No se calcula 38 \n", "2023-08-13 12:00:00 Ligeramente nublado 14.4 No se calcula 27 \n", "2023-08-13 19:00:00 Mayormente nublado 14.7 No se calcula 32 \n", "2023-08-13 20:00:00 Mayormente nublado 14.9 No se calcula 33 \n", "2023-08-13 13:00:00 Ligeramente nublado 15.2 No se calcula 25 \n", "2023-08-13 18:00:00 Parcialmente nublado 15.6 No se calcula 26 \n", "2023-08-13 17:00:00 Parcialmente nublado 16.2 No se calcula 25 \n", "2023-08-13 14:00:00 Ligeramente nublado 16.3 No se calcula 23 \n", "2023-08-13 15:00:00 Algo nublado 16.9 No se calcula 24 \n", "2023-08-13 16:00:00 Algo nublado 17.2 No se calcula 25 \n", "\n", " Viento dirección Viento velocidad Presión Visibilidad \n", "Fecha_Hora \n", "2023-08-13 06:00:00 Calma NaN 1022.8 hPa 10 km \n", "2023-08-13 05:00:00 Calma NaN 1022.8 hPa 10 km \n", "2023-08-13 04:00:00 Calma NaN 1023.3 hPa 10 km \n", "2023-08-13 03:00:00 Calma NaN 1023.7 hPa 10 km \n", "2023-08-13 07:00:00 Oeste 3 km/h 1023.2 hPa 10 km \n", "2023-08-13 08:00:00 Norte 3 km/h 1023.2 hPa 10 km \n", "2023-08-13 09:00:00 Noroeste 7 km/h 1022.9 hPa 10 km \n", "2023-08-13 10:00:00 Norte 9 km/h 1023.3 hPa 10 km \n", "2023-08-14 00:00:00 Noroeste 9 km/h 1014.8 hPa 10 km \n", "2023-08-13 11:00:00 Noroeste 5 km/h 1023.2 hPa 10 km \n", "2023-08-13 23:00:00 Noroeste 16 km/h 1015.2 hPa 10 km \n", "2023-08-13 22:00:00 Norte 7 km/h 1015.6 hPa 10 km \n", "2023-08-13 21:00:00 Norte 11 km/h 1015 hPa 10 km \n", "2023-08-13 12:00:00 Norte 7 km/h 1021.7 hPa 10 km \n", "2023-08-13 19:00:00 Norte 13 km/h 1015.6 hPa 10 km \n", "2023-08-13 20:00:00 Norte 9 km/h 1015.2 hPa 10 km \n", "2023-08-13 13:00:00 Norte 14 km/h 1020.6 hPa 10 km \n", "2023-08-13 18:00:00 Norte 7 km/h 1015.6 hPa 10 km \n", "2023-08-13 17:00:00 Norte 14 km/h 1016 hPa 10 km \n", "2023-08-13 14:00:00 Norte 13 km/h 1019.4 hPa 10 km \n", "2023-08-13 15:00:00 Norte 16 km/h 1017.7 hPa 10 km \n", "2023-08-13 16:00:00 Norte 16 km/h 1016.6 hPa 10 km " ] }, "execution_count": 126, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.sort_values(by=\"T (°C)\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notar que podemos ordenar por filas, pero también por columnas:" ] }, { "cell_type": "code", "execution_count": 127, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EstadoHR (%)PresiónST (°C)T (°C)Viento direcciónViento velocidadVisibilidad
Fecha_Hora
2023-08-14 00:00:00Nublado371014.8 hPaNo se calcula12.8Noroeste9 km/h10 km
2023-08-13 23:00:00Nublado371015.2 hPaNo se calcula13.0Noroeste16 km/h10 km
2023-08-13 22:00:00Nublado431015.6 hPaNo se calcula13.2Norte7 km/h10 km
2023-08-13 21:00:00Mayormente nublado381015 hPaNo se calcula13.8Norte11 km/h10 km
2023-08-13 20:00:00Mayormente nublado331015.2 hPaNo se calcula14.9Norte9 km/h10 km
2023-08-13 19:00:00Mayormente nublado321015.6 hPaNo se calcula14.7Norte13 km/h10 km
2023-08-13 18:00:00Parcialmente nublado261015.6 hPaNo se calcula15.6Norte7 km/h10 km
2023-08-13 17:00:00Parcialmente nublado251016 hPaNo se calcula16.2Norte14 km/h10 km
2023-08-13 16:00:00Algo nublado251016.6 hPaNo se calcula17.2Norte16 km/h10 km
2023-08-13 15:00:00Algo nublado241017.7 hPaNo se calcula16.9Norte16 km/h10 km
2023-08-13 14:00:00Ligeramente nublado231019.4 hPaNo se calcula16.3Norte13 km/h10 km
2023-08-13 13:00:00Ligeramente nublado251020.6 hPaNo se calcula15.2Norte14 km/h10 km
2023-08-13 12:00:00Ligeramente nublado271021.7 hPaNo se calcula14.4Norte7 km/h10 km
2023-08-13 11:00:00Ligeramente nublado301023.2 hPaNo se calcula12.9Noroeste5 km/h10 km
2023-08-13 10:00:00Ligeramente nublado341023.3 hPaNo se calcula10.8Norte9 km/h10 km
2023-08-13 09:00:00Ligeramente nublado441022.9 hPa7.58.6Noroeste7 km/h10 km
2023-08-13 08:00:00Ligeramente nublado591023.2 hPaNo se calcula5.3Norte3 km/h10 km
2023-08-13 07:00:00Despejado701023.2 hPaNo se calcula4.0Oeste3 km/h10 km
2023-08-13 06:00:00Despejado711022.8 hPaNo se calcula3.1CalmaNaN10 km
2023-08-13 05:00:00Despejado711022.8 hPaNo se calcula3.2CalmaNaN10 km
2023-08-13 04:00:00Despejado701023.3 hPaNo se calcula3.4CalmaNaN10 km
2023-08-13 03:00:00Despejado721023.7 hPaNo se calcula3.7CalmaNaN10 km
\n", "
" ], "text/plain": [ " Estado HR (%) Presión ST (°C) \\\n", "Fecha_Hora \n", "2023-08-14 00:00:00 Nublado 37 1014.8 hPa No se calcula \n", "2023-08-13 23:00:00 Nublado 37 1015.2 hPa No se calcula \n", "2023-08-13 22:00:00 Nublado 43 1015.6 hPa No se calcula \n", "2023-08-13 21:00:00 Mayormente nublado 38 1015 hPa No se calcula \n", "2023-08-13 20:00:00 Mayormente nublado 33 1015.2 hPa No se calcula \n", "2023-08-13 19:00:00 Mayormente nublado 32 1015.6 hPa No se calcula \n", "2023-08-13 18:00:00 Parcialmente nublado 26 1015.6 hPa No se calcula \n", "2023-08-13 17:00:00 Parcialmente nublado 25 1016 hPa No se calcula \n", "2023-08-13 16:00:00 Algo nublado 25 1016.6 hPa No se calcula \n", "2023-08-13 15:00:00 Algo nublado 24 1017.7 hPa No se calcula \n", "2023-08-13 14:00:00 Ligeramente nublado 23 1019.4 hPa No se calcula \n", "2023-08-13 13:00:00 Ligeramente nublado 25 1020.6 hPa No se calcula \n", "2023-08-13 12:00:00 Ligeramente nublado 27 1021.7 hPa No se calcula \n", "2023-08-13 11:00:00 Ligeramente nublado 30 1023.2 hPa No se calcula \n", "2023-08-13 10:00:00 Ligeramente nublado 34 1023.3 hPa No se calcula \n", "2023-08-13 09:00:00 Ligeramente nublado 44 1022.9 hPa 7.5 \n", "2023-08-13 08:00:00 Ligeramente nublado 59 1023.2 hPa No se calcula \n", "2023-08-13 07:00:00 Despejado 70 1023.2 hPa No se calcula \n", "2023-08-13 06:00:00 Despejado 71 1022.8 hPa No se calcula \n", "2023-08-13 05:00:00 Despejado 71 1022.8 hPa No se calcula \n", "2023-08-13 04:00:00 Despejado 70 1023.3 hPa No se calcula \n", "2023-08-13 03:00:00 Despejado 72 1023.7 hPa No se calcula \n", "\n", " T (°C) Viento dirección Viento velocidad Visibilidad \n", "Fecha_Hora \n", "2023-08-14 00:00:00 12.8 Noroeste 9 km/h 10 km \n", "2023-08-13 23:00:00 13.0 Noroeste 16 km/h 10 km \n", "2023-08-13 22:00:00 13.2 Norte 7 km/h 10 km \n", "2023-08-13 21:00:00 13.8 Norte 11 km/h 10 km \n", "2023-08-13 20:00:00 14.9 Norte 9 km/h 10 km \n", "2023-08-13 19:00:00 14.7 Norte 13 km/h 10 km \n", "2023-08-13 18:00:00 15.6 Norte 7 km/h 10 km \n", "2023-08-13 17:00:00 16.2 Norte 14 km/h 10 km \n", "2023-08-13 16:00:00 17.2 Norte 16 km/h 10 km \n", "2023-08-13 15:00:00 16.9 Norte 16 km/h 10 km \n", "2023-08-13 14:00:00 16.3 Norte 13 km/h 10 km \n", "2023-08-13 13:00:00 15.2 Norte 14 km/h 10 km \n", "2023-08-13 12:00:00 14.4 Norte 7 km/h 10 km \n", "2023-08-13 11:00:00 12.9 Noroeste 5 km/h 10 km \n", "2023-08-13 10:00:00 10.8 Norte 9 km/h 10 km \n", "2023-08-13 09:00:00 8.6 Noroeste 7 km/h 10 km \n", "2023-08-13 08:00:00 5.3 Norte 3 km/h 10 km \n", "2023-08-13 07:00:00 4.0 Oeste 3 km/h 10 km \n", "2023-08-13 06:00:00 3.1 Calma NaN 10 km \n", "2023-08-13 05:00:00 3.2 Calma NaN 10 km \n", "2023-08-13 04:00:00 3.4 Calma NaN 10 km \n", "2023-08-13 03:00:00 3.7 Calma NaN 10 km " ] }, "execution_count": 127, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.sort_index(axis=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "``rename`` permite cambiar de nombre a las columnas elegidas. Tampoco se modifica el dataframe, a no ser que se utilice la opción inplace=True:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EstadoTemperaturaST (°C)Humedad relativaViento direcciónViento velocidadPresiónVisibilidad
Fecha_Hora
2023-08-14 00:00:00Nublado12.8No se calcula37Noroeste9 km/h1014.8 hPa10 km
2023-08-13 23:00:00Nublado13.0No se calcula37Noroeste16 km/h1015.2 hPa10 km
2023-08-13 22:00:00Nublado13.2No se calcula43Norte7 km/h1015.6 hPa10 km
2023-08-13 21:00:00Mayormente nublado13.8No se calcula38Norte11 km/h1015 hPa10 km
2023-08-13 20:00:00Mayormente nublado14.9No se calcula33Norte9 km/h1015.2 hPa10 km
2023-08-13 19:00:00Mayormente nublado14.7No se calcula32Norte13 km/h1015.6 hPa10 km
2023-08-13 18:00:00Parcialmente nublado15.6No se calcula26Norte7 km/h1015.6 hPa10 km
2023-08-13 17:00:00Parcialmente nublado16.2No se calcula25Norte14 km/h1016 hPa10 km
2023-08-13 16:00:00Algo nublado17.2No se calcula25Norte16 km/h1016.6 hPa10 km
2023-08-13 15:00:00Algo nublado16.9No se calcula24Norte16 km/h1017.7 hPa10 km
2023-08-13 14:00:00Ligeramente nublado16.3No se calcula23Norte13 km/h1019.4 hPa10 km
2023-08-13 13:00:00Ligeramente nublado15.2No se calcula25Norte14 km/h1020.6 hPa10 km
2023-08-13 12:00:00Ligeramente nublado14.4No se calcula27Norte7 km/h1021.7 hPa10 km
2023-08-13 11:00:00Ligeramente nublado12.9No se calcula30Noroeste5 km/h1023.2 hPa10 km
2023-08-13 10:00:00Ligeramente nublado10.8No se calcula34Norte9 km/h1023.3 hPa10 km
2023-08-13 09:00:00Ligeramente nublado8.67.544Noroeste7 km/h1022.9 hPa10 km
2023-08-13 08:00:00Ligeramente nublado5.3No se calcula59Norte3 km/h1023.2 hPa10 km
2023-08-13 07:00:00Despejado4.0No se calcula70Oeste3 km/h1023.2 hPa10 km
2023-08-13 06:00:00Despejado3.1No se calcula71CalmaNaN1022.8 hPa10 km
2023-08-13 05:00:00Despejado3.2No se calcula71CalmaNaN1022.8 hPa10 km
2023-08-13 04:00:00Despejado3.4No se calcula70CalmaNaN1023.3 hPa10 km
2023-08-13 03:00:00Despejado3.7No se calcula72CalmaNaN1023.7 hPa10 km
\n", "
" ], "text/plain": [ " Estado Temperatura ST (°C) \\\n", "Fecha_Hora \n", "2023-08-14 00:00:00 Nublado 12.8 No se calcula \n", "2023-08-13 23:00:00 Nublado 13.0 No se calcula \n", "2023-08-13 22:00:00 Nublado 13.2 No se calcula \n", "2023-08-13 21:00:00 Mayormente nublado 13.8 No se calcula \n", "2023-08-13 20:00:00 Mayormente nublado 14.9 No se calcula \n", "2023-08-13 19:00:00 Mayormente nublado 14.7 No se calcula \n", "2023-08-13 18:00:00 Parcialmente nublado 15.6 No se calcula \n", "2023-08-13 17:00:00 Parcialmente nublado 16.2 No se calcula \n", "2023-08-13 16:00:00 Algo nublado 17.2 No se calcula \n", "2023-08-13 15:00:00 Algo nublado 16.9 No se calcula \n", "2023-08-13 14:00:00 Ligeramente nublado 16.3 No se calcula \n", "2023-08-13 13:00:00 Ligeramente nublado 15.2 No se calcula \n", "2023-08-13 12:00:00 Ligeramente nublado 14.4 No se calcula \n", "2023-08-13 11:00:00 Ligeramente nublado 12.9 No se calcula \n", "2023-08-13 10:00:00 Ligeramente nublado 10.8 No se calcula \n", "2023-08-13 09:00:00 Ligeramente nublado 8.6 7.5 \n", "2023-08-13 08:00:00 Ligeramente nublado 5.3 No se calcula \n", "2023-08-13 07:00:00 Despejado 4.0 No se calcula \n", "2023-08-13 06:00:00 Despejado 3.1 No se calcula \n", "2023-08-13 05:00:00 Despejado 3.2 No se calcula \n", "2023-08-13 04:00:00 Despejado 3.4 No se calcula \n", "2023-08-13 03:00:00 Despejado 3.7 No se calcula \n", "\n", " Humedad relativa Viento dirección Viento velocidad \\\n", "Fecha_Hora \n", "2023-08-14 00:00:00 37 Noroeste 9 km/h \n", "2023-08-13 23:00:00 37 Noroeste 16 km/h \n", "2023-08-13 22:00:00 43 Norte 7 km/h \n", "2023-08-13 21:00:00 38 Norte 11 km/h \n", "2023-08-13 20:00:00 33 Norte 9 km/h \n", "2023-08-13 19:00:00 32 Norte 13 km/h \n", "2023-08-13 18:00:00 26 Norte 7 km/h \n", "2023-08-13 17:00:00 25 Norte 14 km/h \n", "2023-08-13 16:00:00 25 Norte 16 km/h \n", "2023-08-13 15:00:00 24 Norte 16 km/h \n", "2023-08-13 14:00:00 23 Norte 13 km/h \n", "2023-08-13 13:00:00 25 Norte 14 km/h \n", "2023-08-13 12:00:00 27 Norte 7 km/h \n", "2023-08-13 11:00:00 30 Noroeste 5 km/h \n", "2023-08-13 10:00:00 34 Norte 9 km/h \n", "2023-08-13 09:00:00 44 Noroeste 7 km/h \n", "2023-08-13 08:00:00 59 Norte 3 km/h \n", "2023-08-13 07:00:00 70 Oeste 3 km/h \n", "2023-08-13 06:00:00 71 Calma NaN \n", "2023-08-13 05:00:00 71 Calma NaN \n", "2023-08-13 04:00:00 70 Calma NaN \n", "2023-08-13 03:00:00 72 Calma NaN \n", "\n", " Presión Visibilidad \n", "Fecha_Hora \n", "2023-08-14 00:00:00 1014.8 hPa 10 km \n", "2023-08-13 23:00:00 1015.2 hPa 10 km \n", "2023-08-13 22:00:00 1015.6 hPa 10 km \n", "2023-08-13 21:00:00 1015 hPa 10 km \n", "2023-08-13 20:00:00 1015.2 hPa 10 km \n", "2023-08-13 19:00:00 1015.6 hPa 10 km \n", "2023-08-13 18:00:00 1015.6 hPa 10 km \n", "2023-08-13 17:00:00 1016 hPa 10 km \n", "2023-08-13 16:00:00 1016.6 hPa 10 km \n", "2023-08-13 15:00:00 1017.7 hPa 10 km \n", "2023-08-13 14:00:00 1019.4 hPa 10 km \n", "2023-08-13 13:00:00 1020.6 hPa 10 km \n", "2023-08-13 12:00:00 1021.7 hPa 10 km \n", "2023-08-13 11:00:00 1023.2 hPa 10 km \n", "2023-08-13 10:00:00 1023.3 hPa 10 km \n", "2023-08-13 09:00:00 1022.9 hPa 10 km \n", "2023-08-13 08:00:00 1023.2 hPa 10 km \n", "2023-08-13 07:00:00 1023.2 hPa 10 km \n", "2023-08-13 06:00:00 1022.8 hPa 10 km \n", "2023-08-13 05:00:00 1022.8 hPa 10 km \n", "2023-08-13 04:00:00 1023.3 hPa 10 km \n", "2023-08-13 03:00:00 1023.7 hPa 10 km " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.rename(columns={'T (°C)': 'Temperatura', 'HR (%)': 'Humedad relativa'})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Seleccionar y modificar valores" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Partimos de nuestro dataframe habitual:" ] }, { "cell_type": "code", "execution_count": 134, "metadata": {}, "outputs": [], "source": [ "df = pd.read_csv(\"buenos_aires_20230813.txt\", parse_dates=[['Fecha', 'Hora']], \n", " sep=\",\", encoding = \"ISO-8859-1\")\n", "df = df.set_index('Fecha_Hora')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Para seleccionar una columna de un dataframe podemos utilizar el operador []. Esto nos devolverá una serie (reducimos su dimensión):" ] }, { "cell_type": "code", "execution_count": 189, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Fecha_Hora\n", "2023-08-14 00:00:00 Nublado\n", "2023-08-13 23:00:00 Nublado\n", "2023-08-13 22:00:00 Nublado\n", "2023-08-13 21:00:00 Mayormente nublado\n", "2023-08-13 20:00:00 Mayormente nublado\n", "2023-08-13 19:00:00 Mayormente nublado\n", "2023-08-13 18:00:00 Parcialmente nublado\n", "2023-08-13 17:00:00 Parcialmente nublado\n", "2023-08-13 16:00:00 Algo nublado\n", "2023-08-13 15:00:00 Algo nublado\n", "2023-08-13 14:00:00 Ligeramente nublado\n", "2023-08-13 13:00:00 Ligeramente nublado\n", "2023-08-13 12:00:00 Ligeramente nublado\n", "2023-08-13 11:00:00 Ligeramente nublado\n", "2023-08-13 10:00:00 Ligeramente nublado\n", "2023-08-13 09:00:00 Ligeramente nublado\n", "2023-08-13 08:00:00 Ligeramente nublado\n", "2023-08-13 07:00:00 Despejado\n", "2023-08-13 06:00:00 Despejado\n", "2023-08-13 05:00:00 Despejado\n", "2023-08-13 04:00:00 Despejado\n", "2023-08-13 03:00:00 Despejado\n", "Name: Estado, dtype: object" ] }, "execution_count": 189, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s = df['Estado'] # También podría ponerse s = df.Estado\n", "s" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Para obtener un dataframe tendríamos que usar [[]]:" ] }, { "cell_type": "code", "execution_count": 136, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
T (°C)HR (%)
Fecha_Hora
2023-08-14 00:00:0012.837
2023-08-13 23:00:0013.037
2023-08-13 22:00:0013.243
2023-08-13 21:00:0013.838
2023-08-13 20:00:0014.933
2023-08-13 19:00:0014.732
2023-08-13 18:00:0015.626
2023-08-13 17:00:0016.225
2023-08-13 16:00:0017.225
2023-08-13 15:00:0016.924
2023-08-13 14:00:0016.323
2023-08-13 13:00:0015.225
2023-08-13 12:00:0014.427
2023-08-13 11:00:0012.930
2023-08-13 10:00:0010.834
2023-08-13 09:00:008.644
2023-08-13 08:00:005.359
2023-08-13 07:00:004.070
2023-08-13 06:00:003.171
2023-08-13 05:00:003.271
2023-08-13 04:00:003.470
2023-08-13 03:00:003.772
\n", "
" ], "text/plain": [ " T (°C) HR (%)\n", "Fecha_Hora \n", "2023-08-14 00:00:00 12.8 37\n", "2023-08-13 23:00:00 13.0 37\n", "2023-08-13 22:00:00 13.2 43\n", "2023-08-13 21:00:00 13.8 38\n", "2023-08-13 20:00:00 14.9 33\n", "2023-08-13 19:00:00 14.7 32\n", "2023-08-13 18:00:00 15.6 26\n", "2023-08-13 17:00:00 16.2 25\n", "2023-08-13 16:00:00 17.2 25\n", "2023-08-13 15:00:00 16.9 24\n", "2023-08-13 14:00:00 16.3 23\n", "2023-08-13 13:00:00 15.2 25\n", "2023-08-13 12:00:00 14.4 27\n", "2023-08-13 11:00:00 12.9 30\n", "2023-08-13 10:00:00 10.8 34\n", "2023-08-13 09:00:00 8.6 44\n", "2023-08-13 08:00:00 5.3 59\n", "2023-08-13 07:00:00 4.0 70\n", "2023-08-13 06:00:00 3.1 71\n", "2023-08-13 05:00:00 3.2 71\n", "2023-08-13 04:00:00 3.4 70\n", "2023-08-13 03:00:00 3.7 72" ] }, "execution_count": 136, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[['T (°C)', 'HR (%)']]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "De la misma forma, aplicando este operador al índice de una serie, nos devuelve un valor:" ] }, { "cell_type": "code", "execution_count": 137, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "14.4" ] }, "execution_count": 137, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s['2023-08-13 12:00:00']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "También podemos seleccionar varias filas:" ] }, { "cell_type": "code", "execution_count": 138, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EstadoT (°C)ST (°C)HR (%)Viento direcciónViento velocidadPresiónVisibilidad
Fecha_Hora
2023-08-13 14:00:00Ligeramente nublado16.3No se calcula23Norte13 km/h1019.4 hPa10 km
2023-08-13 13:00:00Ligeramente nublado15.2No se calcula25Norte14 km/h1020.6 hPa10 km
2023-08-13 12:00:00Ligeramente nublado14.4No se calcula27Norte7 km/h1021.7 hPa10 km
\n", "
" ], "text/plain": [ " Estado T (°C) ST (°C) HR (%) \\\n", "Fecha_Hora \n", "2023-08-13 14:00:00 Ligeramente nublado 16.3 No se calcula 23 \n", "2023-08-13 13:00:00 Ligeramente nublado 15.2 No se calcula 25 \n", "2023-08-13 12:00:00 Ligeramente nublado 14.4 No se calcula 27 \n", "\n", " Viento dirección Viento velocidad Presión Visibilidad \n", "Fecha_Hora \n", "2023-08-13 14:00:00 Norte 13 km/h 1019.4 hPa 10 km \n", "2023-08-13 13:00:00 Norte 14 km/h 1020.6 hPa 10 km \n", "2023-08-13 12:00:00 Norte 7 km/h 1021.7 hPa 10 km " ] }, "execution_count": 138, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df['2023-08-13 12:00:00':'2023-08-13 14:00:00']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "o usando la posición, como se hace en python estándar " ] }, { "cell_type": "code", "execution_count": 139, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EstadoT (°C)ST (°C)HR (%)Viento direcciónViento velocidadPresiónVisibilidad
Fecha_Hora
2023-08-13 14:00:00Ligeramente nublado16.3No se calcula23Norte13 km/h1019.4 hPa10 km
2023-08-13 13:00:00Ligeramente nublado15.2No se calcula25Norte14 km/h1020.6 hPa10 km
2023-08-13 12:00:00Ligeramente nublado14.4No se calcula27Norte7 km/h1021.7 hPa10 km
\n", "
" ], "text/plain": [ " Estado T (°C) ST (°C) HR (%) \\\n", "Fecha_Hora \n", "2023-08-13 14:00:00 Ligeramente nublado 16.3 No se calcula 23 \n", "2023-08-13 13:00:00 Ligeramente nublado 15.2 No se calcula 25 \n", "2023-08-13 12:00:00 Ligeramente nublado 14.4 No se calcula 27 \n", "\n", " Viento dirección Viento velocidad Presión Visibilidad \n", "Fecha_Hora \n", "2023-08-13 14:00:00 Norte 13 km/h 1019.4 hPa 10 km \n", "2023-08-13 13:00:00 Norte 14 km/h 1020.6 hPa 10 km \n", "2023-08-13 12:00:00 Norte 7 km/h 1021.7 hPa 10 km " ] }, "execution_count": 139, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[10:13]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "De todas formas, en un programa es mejor utilizar los métodos *loc* e *iloc* que están más optimizados. Además estos métodos nos evitan problemas relacionados con vistas y copias." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*loc* permite seleccionar subconjuntos de nuestra estructura (serie o dataframe), según etiquetas. Para seleccionar columnas:" ] }, { "cell_type": "code", "execution_count": 140, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
T (°C)Estado
Fecha_Hora
2023-08-14 00:00:0012.8Nublado
2023-08-13 23:00:0013.0Nublado
2023-08-13 22:00:0013.2Nublado
2023-08-13 21:00:0013.8Mayormente nublado
2023-08-13 20:00:0014.9Mayormente nublado
2023-08-13 19:00:0014.7Mayormente nublado
2023-08-13 18:00:0015.6Parcialmente nublado
2023-08-13 17:00:0016.2Parcialmente nublado
2023-08-13 16:00:0017.2Algo nublado
2023-08-13 15:00:0016.9Algo nublado
2023-08-13 14:00:0016.3Ligeramente nublado
2023-08-13 13:00:0015.2Ligeramente nublado
2023-08-13 12:00:0014.4Ligeramente nublado
2023-08-13 11:00:0012.9Ligeramente nublado
2023-08-13 10:00:0010.8Ligeramente nublado
2023-08-13 09:00:008.6Ligeramente nublado
2023-08-13 08:00:005.3Ligeramente nublado
2023-08-13 07:00:004.0Despejado
2023-08-13 06:00:003.1Despejado
2023-08-13 05:00:003.2Despejado
2023-08-13 04:00:003.4Despejado
2023-08-13 03:00:003.7Despejado
\n", "
" ], "text/plain": [ " T (°C) Estado\n", "Fecha_Hora \n", "2023-08-14 00:00:00 12.8 Nublado\n", "2023-08-13 23:00:00 13.0 Nublado\n", "2023-08-13 22:00:00 13.2 Nublado\n", "2023-08-13 21:00:00 13.8 Mayormente nublado\n", "2023-08-13 20:00:00 14.9 Mayormente nublado\n", "2023-08-13 19:00:00 14.7 Mayormente nublado\n", "2023-08-13 18:00:00 15.6 Parcialmente nublado\n", "2023-08-13 17:00:00 16.2 Parcialmente nublado\n", "2023-08-13 16:00:00 17.2 Algo nublado\n", "2023-08-13 15:00:00 16.9 Algo nublado\n", "2023-08-13 14:00:00 16.3 Ligeramente nublado\n", "2023-08-13 13:00:00 15.2 Ligeramente nublado\n", "2023-08-13 12:00:00 14.4 Ligeramente nublado\n", "2023-08-13 11:00:00 12.9 Ligeramente nublado\n", "2023-08-13 10:00:00 10.8 Ligeramente nublado\n", "2023-08-13 09:00:00 8.6 Ligeramente nublado\n", "2023-08-13 08:00:00 5.3 Ligeramente nublado\n", "2023-08-13 07:00:00 4.0 Despejado\n", "2023-08-13 06:00:00 3.1 Despejado\n", "2023-08-13 05:00:00 3.2 Despejado\n", "2023-08-13 04:00:00 3.4 Despejado\n", "2023-08-13 03:00:00 3.7 Despejado" ] }, "execution_count": 140, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[['T (°C)', 'Estado']]" ] }, { "cell_type": "code", "execution_count": 141, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
T (°C)Estado
Fecha_Hora
2023-08-14 00:00:0012.8Nublado
2023-08-13 23:00:0013.0Nublado
2023-08-13 22:00:0013.2Nublado
2023-08-13 21:00:0013.8Mayormente nublado
2023-08-13 20:00:0014.9Mayormente nublado
2023-08-13 19:00:0014.7Mayormente nublado
2023-08-13 18:00:0015.6Parcialmente nublado
2023-08-13 17:00:0016.2Parcialmente nublado
2023-08-13 16:00:0017.2Algo nublado
2023-08-13 15:00:0016.9Algo nublado
2023-08-13 14:00:0016.3Ligeramente nublado
2023-08-13 13:00:0015.2Ligeramente nublado
2023-08-13 12:00:0014.4Ligeramente nublado
2023-08-13 11:00:0012.9Ligeramente nublado
2023-08-13 10:00:0010.8Ligeramente nublado
2023-08-13 09:00:008.6Ligeramente nublado
2023-08-13 08:00:005.3Ligeramente nublado
2023-08-13 07:00:004.0Despejado
2023-08-13 06:00:003.1Despejado
2023-08-13 05:00:003.2Despejado
2023-08-13 04:00:003.4Despejado
2023-08-13 03:00:003.7Despejado
\n", "
" ], "text/plain": [ " T (°C) Estado\n", "Fecha_Hora \n", "2023-08-14 00:00:00 12.8 Nublado\n", "2023-08-13 23:00:00 13.0 Nublado\n", "2023-08-13 22:00:00 13.2 Nublado\n", "2023-08-13 21:00:00 13.8 Mayormente nublado\n", "2023-08-13 20:00:00 14.9 Mayormente nublado\n", "2023-08-13 19:00:00 14.7 Mayormente nublado\n", "2023-08-13 18:00:00 15.6 Parcialmente nublado\n", "2023-08-13 17:00:00 16.2 Parcialmente nublado\n", "2023-08-13 16:00:00 17.2 Algo nublado\n", "2023-08-13 15:00:00 16.9 Algo nublado\n", "2023-08-13 14:00:00 16.3 Ligeramente nublado\n", "2023-08-13 13:00:00 15.2 Ligeramente nublado\n", "2023-08-13 12:00:00 14.4 Ligeramente nublado\n", "2023-08-13 11:00:00 12.9 Ligeramente nublado\n", "2023-08-13 10:00:00 10.8 Ligeramente nublado\n", "2023-08-13 09:00:00 8.6 Ligeramente nublado\n", "2023-08-13 08:00:00 5.3 Ligeramente nublado\n", "2023-08-13 07:00:00 4.0 Despejado\n", "2023-08-13 06:00:00 3.1 Despejado\n", "2023-08-13 05:00:00 3.2 Despejado\n", "2023-08-13 04:00:00 3.4 Despejado\n", "2023-08-13 03:00:00 3.7 Despejado" ] }, "execution_count": 141, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.loc[:, ('T (°C)', 'Estado')]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "y para seleccionar filas:" ] }, { "cell_type": "code", "execution_count": 142, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Estado Ligeramente nublado\n", "T (°C) 14.4\n", "ST (°C) No se calcula\n", "HR (%) 27\n", "Viento dirección Norte\n", "Viento velocidad 7 km/h\n", "Presión 1021.7 hPa\n", "Visibilidad 10 km\n", "Name: 2023-08-13 12:00:00, dtype: object" ] }, "execution_count": 142, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.loc['2023-08-13 12:00:00', :]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "o ambos a la vez:" ] }, { "cell_type": "code", "execution_count": 143, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
T (°C)Estado
Fecha_Hora
2023-08-13 14:00:0016.3Ligeramente nublado
2023-08-13 13:00:0015.2Ligeramente nublado
2023-08-13 12:00:0014.4Ligeramente nublado
\n", "
" ], "text/plain": [ " T (°C) Estado\n", "Fecha_Hora \n", "2023-08-13 14:00:00 16.3 Ligeramente nublado\n", "2023-08-13 13:00:00 15.2 Ligeramente nublado\n", "2023-08-13 12:00:00 14.4 Ligeramente nublado" ] }, "execution_count": 143, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.loc['2023-08-13 12:00:00':'2023-08-13 14:00:00', \n", " ('T (°C)', 'Estado')]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Nota:** observar que en la selección por etiquetas, tanto el elemento inicial como el final se incluyen (al contrario de lo que ocurre en una lista)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*iloc* selecciona subconjuntos según su posición. De forma equivalente a los ejemplos anteriores:" ] }, { "cell_type": "code", "execution_count": 144, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Estado Nublado\n", "T (°C) 13.2\n", "ST (°C) No se calcula\n", "HR (%) 43\n", "Viento dirección Norte\n", "Viento velocidad 7 km/h\n", "Presión 1015.6 hPa\n", "Visibilidad 10 km\n", "Name: 2023-08-13 22:00:00, dtype: object" ] }, "execution_count": 144, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.iloc[2]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "o también:" ] }, { "cell_type": "code", "execution_count": 145, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Estado Nublado\n", "T (°C) 13.2\n", "ST (°C) No se calcula\n", "HR (%) 43\n", "Viento dirección Norte\n", "Viento velocidad 7 km/h\n", "Presión 1015.6 hPa\n", "Visibilidad 10 km\n", "Name: 2023-08-13 22:00:00, dtype: object" ] }, "execution_count": 145, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.iloc[2, :]" ] }, { "cell_type": "code", "execution_count": 146, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Fecha_HoraEstadoT (°C)ST (°C)HR (%)Viento direcciónViento velocidadPresiónVisibilidad
02023-08-14 00:00:00Nublado12.8No se calcula37Noroeste9 km/h1014.8 hPa10 km
12023-08-13 23:00:00Nublado13.0No se calcula37Noroeste16 km/h1015.2 hPa10 km
22023-08-13 22:00:00Nublado13.2No se calcula43Norte7 km/h1015.6 hPa10 km
32023-08-13 21:00:00Mayormente nublado13.8No se calcula38Norte11 km/h1015 hPa10 km
42023-08-13 20:00:00Mayormente nublado14.9No se calcula33Norte9 km/h1015.2 hPa10 km
52023-08-13 19:00:00Mayormente nublado14.7No se calcula32Norte13 km/h1015.6 hPa10 km
62023-08-13 18:00:00Parcialmente nublado15.6No se calcula26Norte7 km/h1015.6 hPa10 km
72023-08-13 17:00:00Parcialmente nublado16.2No se calcula25Norte14 km/h1016 hPa10 km
82023-08-13 16:00:00Algo nublado17.2No se calcula25Norte16 km/h1016.6 hPa10 km
92023-08-13 15:00:00Algo nublado16.9No se calcula24Norte16 km/h1017.7 hPa10 km
102023-08-13 14:00:00Ligeramente nublado16.3No se calcula23Norte13 km/h1019.4 hPa10 km
112023-08-13 13:00:00Ligeramente nublado15.2No se calcula25Norte14 km/h1020.6 hPa10 km
122023-08-13 12:00:00Ligeramente nublado14.4No se calcula27Norte7 km/h1021.7 hPa10 km
132023-08-13 11:00:00Ligeramente nublado12.9No se calcula30Noroeste5 km/h1023.2 hPa10 km
142023-08-13 10:00:00Ligeramente nublado10.8No se calcula34Norte9 km/h1023.3 hPa10 km
152023-08-13 09:00:00Ligeramente nublado8.67.544Noroeste7 km/h1022.9 hPa10 km
162023-08-13 08:00:00Ligeramente nublado5.3No se calcula59Norte3 km/h1023.2 hPa10 km
172023-08-13 07:00:00Despejado4.0No se calcula70Oeste3 km/h1023.2 hPa10 km
182023-08-13 06:00:00Despejado3.1No se calcula71CalmaNaN1022.8 hPa10 km
192023-08-13 05:00:00Despejado3.2No se calcula71CalmaNaN1022.8 hPa10 km
202023-08-13 04:00:00Despejado3.4No se calcula70CalmaNaN1023.3 hPa10 km
212023-08-13 03:00:00Despejado3.7No se calcula72CalmaNaN1023.7 hPa10 km
\n", "
" ], "text/plain": [ " Fecha_Hora Estado T (°C) ST (°C) HR (%) \\\n", "0 2023-08-14 00:00:00 Nublado 12.8 No se calcula 37 \n", "1 2023-08-13 23:00:00 Nublado 13.0 No se calcula 37 \n", "2 2023-08-13 22:00:00 Nublado 13.2 No se calcula 43 \n", "3 2023-08-13 21:00:00 Mayormente nublado 13.8 No se calcula 38 \n", "4 2023-08-13 20:00:00 Mayormente nublado 14.9 No se calcula 33 \n", "5 2023-08-13 19:00:00 Mayormente nublado 14.7 No se calcula 32 \n", "6 2023-08-13 18:00:00 Parcialmente nublado 15.6 No se calcula 26 \n", "7 2023-08-13 17:00:00 Parcialmente nublado 16.2 No se calcula 25 \n", "8 2023-08-13 16:00:00 Algo nublado 17.2 No se calcula 25 \n", "9 2023-08-13 15:00:00 Algo nublado 16.9 No se calcula 24 \n", "10 2023-08-13 14:00:00 Ligeramente nublado 16.3 No se calcula 23 \n", "11 2023-08-13 13:00:00 Ligeramente nublado 15.2 No se calcula 25 \n", "12 2023-08-13 12:00:00 Ligeramente nublado 14.4 No se calcula 27 \n", "13 2023-08-13 11:00:00 Ligeramente nublado 12.9 No se calcula 30 \n", "14 2023-08-13 10:00:00 Ligeramente nublado 10.8 No se calcula 34 \n", "15 2023-08-13 09:00:00 Ligeramente nublado 8.6 7.5 44 \n", "16 2023-08-13 08:00:00 Ligeramente nublado 5.3 No se calcula 59 \n", "17 2023-08-13 07:00:00 Despejado 4.0 No se calcula 70 \n", "18 2023-08-13 06:00:00 Despejado 3.1 No se calcula 71 \n", "19 2023-08-13 05:00:00 Despejado 3.2 No se calcula 71 \n", "20 2023-08-13 04:00:00 Despejado 3.4 No se calcula 70 \n", "21 2023-08-13 03:00:00 Despejado 3.7 No se calcula 72 \n", "\n", " Viento dirección Viento velocidad Presión Visibilidad \n", "0 Noroeste 9 km/h 1014.8 hPa 10 km \n", "1 Noroeste 16 km/h 1015.2 hPa 10 km \n", "2 Norte 7 km/h 1015.6 hPa 10 km \n", "3 Norte 11 km/h 1015 hPa 10 km \n", "4 Norte 9 km/h 1015.2 hPa 10 km \n", "5 Norte 13 km/h 1015.6 hPa 10 km \n", "6 Norte 7 km/h 1015.6 hPa 10 km \n", "7 Norte 14 km/h 1016 hPa 10 km \n", "8 Norte 16 km/h 1016.6 hPa 10 km \n", "9 Norte 16 km/h 1017.7 hPa 10 km \n", "10 Norte 13 km/h 1019.4 hPa 10 km \n", "11 Norte 14 km/h 1020.6 hPa 10 km \n", "12 Norte 7 km/h 1021.7 hPa 10 km \n", "13 Noroeste 5 km/h 1023.2 hPa 10 km \n", "14 Norte 9 km/h 1023.3 hPa 10 km \n", "15 Noroeste 7 km/h 1022.9 hPa 10 km \n", "16 Norte 3 km/h 1023.2 hPa 10 km \n", "17 Oeste 3 km/h 1023.2 hPa 10 km \n", "18 Calma NaN 1022.8 hPa 10 km \n", "19 Calma NaN 1022.8 hPa 10 km \n", "20 Calma NaN 1023.3 hPa 10 km \n", "21 Calma NaN 1023.7 hPa 10 km " ] }, "execution_count": 146, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = df.reset_index()\n", "df" ] }, { "cell_type": "code", "execution_count": 147, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
T (°C)Estado
213.2Nublado
313.8Mayormente nublado
414.9Mayormente nublado
\n", "
" ], "text/plain": [ " T (°C) Estado\n", "2 13.2 Nublado\n", "3 13.8 Mayormente nublado\n", "4 14.9 Mayormente nublado" ] }, "execution_count": 147, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.loc[2:4, ('T (°C)', 'Estado')]" ] }, { "cell_type": "code", "execution_count": 148, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EstadoT (°C)
2Nublado13.2
3Mayormente nublado13.8
4Mayormente nublado14.9
\n", "
" ], "text/plain": [ " Estado T (°C)\n", "2 Nublado 13.2\n", "3 Mayormente nublado 13.8\n", "4 Mayormente nublado 14.9" ] }, "execution_count": 148, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.iloc[2:5, 1:3]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "También se pueden hacer selecciones discontinuas, como haríamos en python estándar:" ] }, { "cell_type": "code", "execution_count": 149, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
T (°C)Viento dirección
113.0Noroeste
213.2Norte
414.9Norte
\n", "
" ], "text/plain": [ " T (°C) Viento dirección\n", "1 13.0 Noroeste\n", "2 13.2 Norte\n", "4 14.9 Norte" ] }, "execution_count": 149, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.iloc[[1,2,4], [2,5]]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "E incluso un elemento:" ] }, { "cell_type": "code", "execution_count": 150, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Timestamp('2023-08-14 00:00:00')" ] }, "execution_count": 150, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.iloc[0,0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Aunque para seleccionar elementos es mejor utilizar el método *at* (o el *iat*), que son más rápidos y eficientes:" ] }, { "cell_type": "code", "execution_count": 151, "metadata": {}, "outputs": [], "source": [ "df = df.set_index('Fecha_Hora')" ] }, { "cell_type": "code", "execution_count": 152, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "37" ] }, "execution_count": 152, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.at['2023-08-13 23:00:00', 'HR (%)']" ] }, { "cell_type": "code", "execution_count": 153, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'Noroeste'" ] }, "execution_count": 153, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.iat[1,4]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Otra forma de realizar selecciones es mediante la **indexación booleana**, que nos permite seleccionar valores de acuerdo a una condición relativa al dataframe." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Por ejemplo, si queremos seleccionar las filas para las que la GHI es mayor de 500, tenemos que usar esta condición:" ] }, { "cell_type": "code", "execution_count": 158, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([False, False, False, False, False, False, False, False, False,\n", " True, False, False, False, False, False, False, False, False,\n", " False, False, False, False])" ] }, "execution_count": 158, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.index.hour==15" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "y si introducimos esta serie de booleanos en nuestro dataframe, imponemos la condición:" ] }, { "cell_type": "code", "execution_count": 154, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EstadoT (°C)ST (°C)HR (%)Viento direcciónViento velocidadPresiónVisibilidad
Fecha_Hora
2023-08-13 15:00:00Algo nublado16.9No se calcula24Norte16 km/h1017.7 hPa10 km
\n", "
" ], "text/plain": [ " Estado T (°C) ST (°C) HR (%) \\\n", "Fecha_Hora \n", "2023-08-13 15:00:00 Algo nublado 16.9 No se calcula 24 \n", "\n", " Viento dirección Viento velocidad Presión Visibilidad \n", "Fecha_Hora \n", "2023-08-13 15:00:00 Norte 16 km/h 1017.7 hPa 10 km " ] }, "execution_count": 154, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[df.index.hour==15]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Se pueden utilizar operadores booleanos (&, |, ~) para construir condiciones más complicadas:" ] }, { "cell_type": "code", "execution_count": 159, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EstadoT (°C)ST (°C)HR (%)Viento direcciónViento velocidadPresiónVisibilidad
Fecha_Hora
2023-08-13 20:00:00Mayormente nublado14.9No se calcula33Norte9 km/h1015.2 hPa10 km
2023-08-13 19:00:00Mayormente nublado14.7No se calcula32Norte13 km/h1015.6 hPa10 km
\n", "
" ], "text/plain": [ " Estado T (°C) ST (°C) HR (%) \\\n", "Fecha_Hora \n", "2023-08-13 20:00:00 Mayormente nublado 14.9 No se calcula 33 \n", "2023-08-13 19:00:00 Mayormente nublado 14.7 No se calcula 32 \n", "\n", " Viento dirección Viento velocidad Presión Visibilidad \n", "Fecha_Hora \n", "2023-08-13 20:00:00 Norte 9 km/h 1015.2 hPa 10 km \n", "2023-08-13 19:00:00 Norte 13 km/h 1015.6 hPa 10 km " ] }, "execution_count": 159, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[(df['T (°C)']>14.0) & (df['HR (%)']>30.0)] " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "No solo se pueden realizar selecciones sobre filas o columnas, también sobre valores. En este caso se da el valor np.nan a los elementos donde no se cumpla la condición:" ] }, { "cell_type": "code", "execution_count": 160, "metadata": {}, "outputs": [], "source": [ "df_num = df[['T (°C)', 'HR (%)']]" ] }, { "cell_type": "code", "execution_count": 161, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
T (°C)HR (%)
Fecha_Hora
2023-08-14 00:00:00FalseTrue
2023-08-13 23:00:00FalseTrue
2023-08-13 22:00:00FalseFalse
2023-08-13 21:00:00FalseTrue
2023-08-13 20:00:00FalseTrue
2023-08-13 19:00:00FalseTrue
2023-08-13 18:00:00TrueTrue
2023-08-13 17:00:00TrueTrue
2023-08-13 16:00:00TrueTrue
2023-08-13 15:00:00TrueTrue
2023-08-13 14:00:00TrueTrue
2023-08-13 13:00:00TrueTrue
2023-08-13 12:00:00FalseTrue
2023-08-13 11:00:00FalseTrue
2023-08-13 10:00:00FalseTrue
2023-08-13 09:00:00FalseFalse
2023-08-13 08:00:00FalseFalse
2023-08-13 07:00:00FalseFalse
2023-08-13 06:00:00FalseFalse
2023-08-13 05:00:00FalseFalse
2023-08-13 04:00:00FalseFalse
2023-08-13 03:00:00FalseFalse
\n", "
" ], "text/plain": [ " T (°C) HR (%)\n", "Fecha_Hora \n", "2023-08-14 00:00:00 False True\n", "2023-08-13 23:00:00 False True\n", "2023-08-13 22:00:00 False False\n", "2023-08-13 21:00:00 False True\n", "2023-08-13 20:00:00 False True\n", "2023-08-13 19:00:00 False True\n", "2023-08-13 18:00:00 True True\n", "2023-08-13 17:00:00 True True\n", "2023-08-13 16:00:00 True True\n", "2023-08-13 15:00:00 True True\n", "2023-08-13 14:00:00 True True\n", "2023-08-13 13:00:00 True True\n", "2023-08-13 12:00:00 False True\n", "2023-08-13 11:00:00 False True\n", "2023-08-13 10:00:00 False True\n", "2023-08-13 09:00:00 False False\n", "2023-08-13 08:00:00 False False\n", "2023-08-13 07:00:00 False False\n", "2023-08-13 06:00:00 False False\n", "2023-08-13 05:00:00 False False\n", "2023-08-13 04:00:00 False False\n", "2023-08-13 03:00:00 False False" ] }, "execution_count": 161, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(df_num>15) & (df_num<40)" ] }, { "cell_type": "code", "execution_count": 162, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
T (°C)HR (%)
Fecha_Hora
2023-08-14 00:00:00NaN37.0
2023-08-13 23:00:00NaN37.0
2023-08-13 22:00:00NaNNaN
2023-08-13 21:00:00NaN38.0
2023-08-13 20:00:00NaN33.0
2023-08-13 19:00:00NaN32.0
2023-08-13 18:00:0015.626.0
2023-08-13 17:00:0016.225.0
2023-08-13 16:00:0017.225.0
2023-08-13 15:00:0016.924.0
2023-08-13 14:00:0016.323.0
2023-08-13 13:00:0015.225.0
2023-08-13 12:00:00NaN27.0
2023-08-13 11:00:00NaN30.0
2023-08-13 10:00:00NaN34.0
2023-08-13 09:00:00NaNNaN
2023-08-13 08:00:00NaNNaN
2023-08-13 07:00:00NaNNaN
2023-08-13 06:00:00NaNNaN
2023-08-13 05:00:00NaNNaN
2023-08-13 04:00:00NaNNaN
2023-08-13 03:00:00NaNNaN
\n", "
" ], "text/plain": [ " T (°C) HR (%)\n", "Fecha_Hora \n", "2023-08-14 00:00:00 NaN 37.0\n", "2023-08-13 23:00:00 NaN 37.0\n", "2023-08-13 22:00:00 NaN NaN\n", "2023-08-13 21:00:00 NaN 38.0\n", "2023-08-13 20:00:00 NaN 33.0\n", "2023-08-13 19:00:00 NaN 32.0\n", "2023-08-13 18:00:00 15.6 26.0\n", "2023-08-13 17:00:00 16.2 25.0\n", "2023-08-13 16:00:00 17.2 25.0\n", "2023-08-13 15:00:00 16.9 24.0\n", "2023-08-13 14:00:00 16.3 23.0\n", "2023-08-13 13:00:00 15.2 25.0\n", "2023-08-13 12:00:00 NaN 27.0\n", "2023-08-13 11:00:00 NaN 30.0\n", "2023-08-13 10:00:00 NaN 34.0\n", "2023-08-13 09:00:00 NaN NaN\n", "2023-08-13 08:00:00 NaN NaN\n", "2023-08-13 07:00:00 NaN NaN\n", "2023-08-13 06:00:00 NaN NaN\n", "2023-08-13 05:00:00 NaN NaN\n", "2023-08-13 04:00:00 NaN NaN\n", "2023-08-13 03:00:00 NaN NaN" ] }, "execution_count": 162, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_num[(df_num>15) & (df_num<40)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Se pueden dar valores a filas, columnas o elementos determinados aplicando la sintaxis y métodos anteriores:" ] }, { "cell_type": "code", "execution_count": 163, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EstadoT (°C)ST (°C)HR (%)Viento direcciónViento velocidadPresiónVisibilidad
Fecha_Hora
2023-08-14 00:00:00Nublado12.8No se calcula37Noroeste9 km/h1014.8 hPa10 km
2023-08-13 23:00:00Nublado13.0No se calcula37Noroeste16 km/h1015.2 hPa10 km
2023-08-13 22:00:00Nublado13.2No se calcula43Norte7 km/h1015.6 hPa10 km
2023-08-13 21:00:00Mayormente nublado13.8No se calcula38Norte11 km/h1015 hPa10 km
2023-08-13 20:00:00Mayormente nublado14.9No se calcula33Norte9 km/h1015.2 hPa10 km
2023-08-13 19:00:00Mayormente nublado14.7No se calcula32Norte13 km/h1015.6 hPa10 km
2023-08-13 18:00:00Parcialmente nublado15.6No se calcula26Norte7 km/h1015.6 hPa10 km
2023-08-13 17:00:00Parcialmente nublado16.2No se calcula25Norte14 km/h1016 hPa10 km
2023-08-13 16:00:00Algo nublado17.2No se calcula25Norte16 km/h1016.6 hPa10 km
2023-08-13 15:00:00Algo nublado16.9No se calcula24Norte16 km/h1017.7 hPa10 km
2023-08-13 14:00:00Ligeramente nublado16.3No se calcula23Norte13 km/h1019.4 hPa10 km
2023-08-13 13:00:00Ligeramente nublado15.2No se calcula25Norte14 km/h1020.6 hPa10 km
2023-08-13 12:00:00Ligeramente nublado14.4No se calcula27Norte7 km/h1021.7 hPa10 km
2023-08-13 11:00:00Ligeramente nublado5.0No se calcula5Noroeste5 km/h1023.2 hPa10 km
2023-08-13 10:00:00Ligeramente nublado5.0No se calcula5Norte9 km/h1023.3 hPa10 km
2023-08-13 09:00:00Ligeramente nublado5.07.55Noroeste7 km/h1022.9 hPa10 km
2023-08-13 08:00:00Ligeramente nublado5.3No se calcula59Norte3 km/h1023.2 hPa10 km
2023-08-13 07:00:00Despejado4.0No se calcula70Oeste3 km/h1023.2 hPa10 km
2023-08-13 06:00:00Despejado3.1No se calcula71CalmaNaN1022.8 hPa10 km
2023-08-13 05:00:00Despejado3.2No se calcula71CalmaNaN1022.8 hPa10 km
2023-08-13 04:00:00Despejado3.4No se calcula70CalmaNaN1023.3 hPa10 km
2023-08-13 03:00:00Despejado3.7No se calcula72CalmaNaN1023.7 hPa10 km
\n", "
" ], "text/plain": [ " Estado T (°C) ST (°C) HR (%) \\\n", "Fecha_Hora \n", "2023-08-14 00:00:00 Nublado 12.8 No se calcula 37 \n", "2023-08-13 23:00:00 Nublado 13.0 No se calcula 37 \n", "2023-08-13 22:00:00 Nublado 13.2 No se calcula 43 \n", "2023-08-13 21:00:00 Mayormente nublado 13.8 No se calcula 38 \n", "2023-08-13 20:00:00 Mayormente nublado 14.9 No se calcula 33 \n", "2023-08-13 19:00:00 Mayormente nublado 14.7 No se calcula 32 \n", "2023-08-13 18:00:00 Parcialmente nublado 15.6 No se calcula 26 \n", "2023-08-13 17:00:00 Parcialmente nublado 16.2 No se calcula 25 \n", "2023-08-13 16:00:00 Algo nublado 17.2 No se calcula 25 \n", "2023-08-13 15:00:00 Algo nublado 16.9 No se calcula 24 \n", "2023-08-13 14:00:00 Ligeramente nublado 16.3 No se calcula 23 \n", "2023-08-13 13:00:00 Ligeramente nublado 15.2 No se calcula 25 \n", "2023-08-13 12:00:00 Ligeramente nublado 14.4 No se calcula 27 \n", "2023-08-13 11:00:00 Ligeramente nublado 5.0 No se calcula 5 \n", "2023-08-13 10:00:00 Ligeramente nublado 5.0 No se calcula 5 \n", "2023-08-13 09:00:00 Ligeramente nublado 5.0 7.5 5 \n", "2023-08-13 08:00:00 Ligeramente nublado 5.3 No se calcula 59 \n", "2023-08-13 07:00:00 Despejado 4.0 No se calcula 70 \n", "2023-08-13 06:00:00 Despejado 3.1 No se calcula 71 \n", "2023-08-13 05:00:00 Despejado 3.2 No se calcula 71 \n", "2023-08-13 04:00:00 Despejado 3.4 No se calcula 70 \n", "2023-08-13 03:00:00 Despejado 3.7 No se calcula 72 \n", "\n", " Viento dirección Viento velocidad Presión Visibilidad \n", "Fecha_Hora \n", "2023-08-14 00:00:00 Noroeste 9 km/h 1014.8 hPa 10 km \n", "2023-08-13 23:00:00 Noroeste 16 km/h 1015.2 hPa 10 km \n", "2023-08-13 22:00:00 Norte 7 km/h 1015.6 hPa 10 km \n", "2023-08-13 21:00:00 Norte 11 km/h 1015 hPa 10 km \n", "2023-08-13 20:00:00 Norte 9 km/h 1015.2 hPa 10 km \n", "2023-08-13 19:00:00 Norte 13 km/h 1015.6 hPa 10 km \n", "2023-08-13 18:00:00 Norte 7 km/h 1015.6 hPa 10 km \n", "2023-08-13 17:00:00 Norte 14 km/h 1016 hPa 10 km \n", "2023-08-13 16:00:00 Norte 16 km/h 1016.6 hPa 10 km \n", "2023-08-13 15:00:00 Norte 16 km/h 1017.7 hPa 10 km \n", "2023-08-13 14:00:00 Norte 13 km/h 1019.4 hPa 10 km \n", "2023-08-13 13:00:00 Norte 14 km/h 1020.6 hPa 10 km \n", "2023-08-13 12:00:00 Norte 7 km/h 1021.7 hPa 10 km \n", "2023-08-13 11:00:00 Noroeste 5 km/h 1023.2 hPa 10 km \n", "2023-08-13 10:00:00 Norte 9 km/h 1023.3 hPa 10 km \n", "2023-08-13 09:00:00 Noroeste 7 km/h 1022.9 hPa 10 km \n", "2023-08-13 08:00:00 Norte 3 km/h 1023.2 hPa 10 km \n", "2023-08-13 07:00:00 Oeste 3 km/h 1023.2 hPa 10 km \n", "2023-08-13 06:00:00 Calma NaN 1022.8 hPa 10 km \n", "2023-08-13 05:00:00 Calma NaN 1022.8 hPa 10 km \n", "2023-08-13 04:00:00 Calma NaN 1023.3 hPa 10 km \n", "2023-08-13 03:00:00 Calma NaN 1023.7 hPa 10 km " ] }, "execution_count": 163, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.loc['2023-08-13 09:00:00.0':'2023-08-13 11:00:00.0', \n", " ('T (°C)', 'HR (%)')] = 5.0\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "También se pueden crear nuevas columnas:" ] }, { "cell_type": "code", "execution_count": 164, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EstadoT (°C)ST (°C)HR (%)Viento direcciónViento velocidadPresiónVisibilidadT*2
Fecha_Hora
2023-08-14 00:00:00Nublado12.8No se calcula37Noroeste9 km/h1014.8 hPa10 km163.84
2023-08-13 23:00:00Nublado13.0No se calcula37Noroeste16 km/h1015.2 hPa10 km169.00
2023-08-13 22:00:00Nublado13.2No se calcula43Norte7 km/h1015.6 hPa10 km174.24
2023-08-13 21:00:00Mayormente nublado13.8No se calcula38Norte11 km/h1015 hPa10 km190.44
2023-08-13 20:00:00Mayormente nublado14.9No se calcula33Norte9 km/h1015.2 hPa10 km222.01
2023-08-13 19:00:00Mayormente nublado14.7No se calcula32Norte13 km/h1015.6 hPa10 km216.09
2023-08-13 18:00:00Parcialmente nublado15.6No se calcula26Norte7 km/h1015.6 hPa10 km243.36
2023-08-13 17:00:00Parcialmente nublado16.2No se calcula25Norte14 km/h1016 hPa10 km262.44
2023-08-13 16:00:00Algo nublado17.2No se calcula25Norte16 km/h1016.6 hPa10 km295.84
2023-08-13 15:00:00Algo nublado16.9No se calcula24Norte16 km/h1017.7 hPa10 km285.61
2023-08-13 14:00:00Ligeramente nublado16.3No se calcula23Norte13 km/h1019.4 hPa10 km265.69
2023-08-13 13:00:00Ligeramente nublado15.2No se calcula25Norte14 km/h1020.6 hPa10 km231.04
2023-08-13 12:00:00Ligeramente nublado14.4No se calcula27Norte7 km/h1021.7 hPa10 km207.36
2023-08-13 11:00:00Ligeramente nublado5.0No se calcula5Noroeste5 km/h1023.2 hPa10 km25.00
2023-08-13 10:00:00Ligeramente nublado5.0No se calcula5Norte9 km/h1023.3 hPa10 km25.00
2023-08-13 09:00:00Ligeramente nublado5.07.55Noroeste7 km/h1022.9 hPa10 km25.00
2023-08-13 08:00:00Ligeramente nublado5.3No se calcula59Norte3 km/h1023.2 hPa10 km28.09
2023-08-13 07:00:00Despejado4.0No se calcula70Oeste3 km/h1023.2 hPa10 km16.00
2023-08-13 06:00:00Despejado3.1No se calcula71CalmaNaN1022.8 hPa10 km9.61
2023-08-13 05:00:00Despejado3.2No se calcula71CalmaNaN1022.8 hPa10 km10.24
2023-08-13 04:00:00Despejado3.4No se calcula70CalmaNaN1023.3 hPa10 km11.56
2023-08-13 03:00:00Despejado3.7No se calcula72CalmaNaN1023.7 hPa10 km13.69
\n", "
" ], "text/plain": [ " Estado T (°C) ST (°C) HR (%) \\\n", "Fecha_Hora \n", "2023-08-14 00:00:00 Nublado 12.8 No se calcula 37 \n", "2023-08-13 23:00:00 Nublado 13.0 No se calcula 37 \n", "2023-08-13 22:00:00 Nublado 13.2 No se calcula 43 \n", "2023-08-13 21:00:00 Mayormente nublado 13.8 No se calcula 38 \n", "2023-08-13 20:00:00 Mayormente nublado 14.9 No se calcula 33 \n", "2023-08-13 19:00:00 Mayormente nublado 14.7 No se calcula 32 \n", "2023-08-13 18:00:00 Parcialmente nublado 15.6 No se calcula 26 \n", "2023-08-13 17:00:00 Parcialmente nublado 16.2 No se calcula 25 \n", "2023-08-13 16:00:00 Algo nublado 17.2 No se calcula 25 \n", "2023-08-13 15:00:00 Algo nublado 16.9 No se calcula 24 \n", "2023-08-13 14:00:00 Ligeramente nublado 16.3 No se calcula 23 \n", "2023-08-13 13:00:00 Ligeramente nublado 15.2 No se calcula 25 \n", "2023-08-13 12:00:00 Ligeramente nublado 14.4 No se calcula 27 \n", "2023-08-13 11:00:00 Ligeramente nublado 5.0 No se calcula 5 \n", "2023-08-13 10:00:00 Ligeramente nublado 5.0 No se calcula 5 \n", "2023-08-13 09:00:00 Ligeramente nublado 5.0 7.5 5 \n", "2023-08-13 08:00:00 Ligeramente nublado 5.3 No se calcula 59 \n", "2023-08-13 07:00:00 Despejado 4.0 No se calcula 70 \n", "2023-08-13 06:00:00 Despejado 3.1 No se calcula 71 \n", "2023-08-13 05:00:00 Despejado 3.2 No se calcula 71 \n", "2023-08-13 04:00:00 Despejado 3.4 No se calcula 70 \n", "2023-08-13 03:00:00 Despejado 3.7 No se calcula 72 \n", "\n", " Viento dirección Viento velocidad Presión Visibilidad \\\n", "Fecha_Hora \n", "2023-08-14 00:00:00 Noroeste 9 km/h 1014.8 hPa 10 km \n", "2023-08-13 23:00:00 Noroeste 16 km/h 1015.2 hPa 10 km \n", "2023-08-13 22:00:00 Norte 7 km/h 1015.6 hPa 10 km \n", "2023-08-13 21:00:00 Norte 11 km/h 1015 hPa 10 km \n", "2023-08-13 20:00:00 Norte 9 km/h 1015.2 hPa 10 km \n", "2023-08-13 19:00:00 Norte 13 km/h 1015.6 hPa 10 km \n", "2023-08-13 18:00:00 Norte 7 km/h 1015.6 hPa 10 km \n", "2023-08-13 17:00:00 Norte 14 km/h 1016 hPa 10 km \n", "2023-08-13 16:00:00 Norte 16 km/h 1016.6 hPa 10 km \n", "2023-08-13 15:00:00 Norte 16 km/h 1017.7 hPa 10 km \n", "2023-08-13 14:00:00 Norte 13 km/h 1019.4 hPa 10 km \n", "2023-08-13 13:00:00 Norte 14 km/h 1020.6 hPa 10 km \n", "2023-08-13 12:00:00 Norte 7 km/h 1021.7 hPa 10 km \n", "2023-08-13 11:00:00 Noroeste 5 km/h 1023.2 hPa 10 km \n", "2023-08-13 10:00:00 Norte 9 km/h 1023.3 hPa 10 km \n", "2023-08-13 09:00:00 Noroeste 7 km/h 1022.9 hPa 10 km \n", "2023-08-13 08:00:00 Norte 3 km/h 1023.2 hPa 10 km \n", "2023-08-13 07:00:00 Oeste 3 km/h 1023.2 hPa 10 km \n", "2023-08-13 06:00:00 Calma NaN 1022.8 hPa 10 km \n", "2023-08-13 05:00:00 Calma NaN 1022.8 hPa 10 km \n", "2023-08-13 04:00:00 Calma NaN 1023.3 hPa 10 km \n", "2023-08-13 03:00:00 Calma NaN 1023.7 hPa 10 km \n", "\n", " T*2 \n", "Fecha_Hora \n", "2023-08-14 00:00:00 163.84 \n", "2023-08-13 23:00:00 169.00 \n", "2023-08-13 22:00:00 174.24 \n", "2023-08-13 21:00:00 190.44 \n", "2023-08-13 20:00:00 222.01 \n", "2023-08-13 19:00:00 216.09 \n", "2023-08-13 18:00:00 243.36 \n", "2023-08-13 17:00:00 262.44 \n", "2023-08-13 16:00:00 295.84 \n", "2023-08-13 15:00:00 285.61 \n", "2023-08-13 14:00:00 265.69 \n", "2023-08-13 13:00:00 231.04 \n", "2023-08-13 12:00:00 207.36 \n", "2023-08-13 11:00:00 25.00 \n", "2023-08-13 10:00:00 25.00 \n", "2023-08-13 09:00:00 25.00 \n", "2023-08-13 08:00:00 28.09 \n", "2023-08-13 07:00:00 16.00 \n", "2023-08-13 06:00:00 9.61 \n", "2023-08-13 05:00:00 10.24 \n", "2023-08-13 04:00:00 11.56 \n", "2023-08-13 03:00:00 13.69 " ] }, "execution_count": 164, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df['T*2']=df['T (°C)']**2\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Para aplicar una función a toda una columna usaremos la función *apply*:" ] }, { "cell_type": "code", "execution_count": 165, "metadata": {}, "outputs": [], "source": [ "from numpy import sqrt" ] }, { "cell_type": "code", "execution_count": 166, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Fecha_Hora\n", "2023-08-14 00:00:00 3.577709\n", "2023-08-13 23:00:00 3.605551\n", "2023-08-13 22:00:00 3.633180\n", "2023-08-13 21:00:00 3.714835\n", "2023-08-13 20:00:00 3.860052\n", "2023-08-13 19:00:00 3.834058\n", "2023-08-13 18:00:00 3.949684\n", "2023-08-13 17:00:00 4.024922\n", "2023-08-13 16:00:00 4.147288\n", "2023-08-13 15:00:00 4.110961\n", "2023-08-13 14:00:00 4.037326\n", "2023-08-13 13:00:00 3.898718\n", "2023-08-13 12:00:00 3.794733\n", "2023-08-13 11:00:00 2.236068\n", "2023-08-13 10:00:00 2.236068\n", "2023-08-13 09:00:00 2.236068\n", "2023-08-13 08:00:00 2.302173\n", "2023-08-13 07:00:00 2.000000\n", "2023-08-13 06:00:00 1.760682\n", "2023-08-13 05:00:00 1.788854\n", "2023-08-13 04:00:00 1.843909\n", "2023-08-13 03:00:00 1.923538\n", "Name: T (°C), dtype: float64" ] }, "execution_count": 166, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df['T (°C)'].apply(np.sqrt)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hay una gran cantidad de funciones para modificar columnas.\n", "Por ejemplo, si queremos formatear la velocidad del viento, y convertirla en un valor numérico para poder operar con ella, podemos hacer lo siguiente:" ] }, { "cell_type": "code", "execution_count": 168, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Fecha_Hora\n", "2023-08-14 00:00:00 9.0\n", "2023-08-13 23:00:00 16.0\n", "2023-08-13 22:00:00 7.0\n", "2023-08-13 21:00:00 11.0\n", "2023-08-13 20:00:00 9.0\n", "2023-08-13 19:00:00 13.0\n", "2023-08-13 18:00:00 7.0\n", "2023-08-13 17:00:00 14.0\n", "2023-08-13 16:00:00 16.0\n", "2023-08-13 15:00:00 16.0\n", "2023-08-13 14:00:00 13.0\n", "2023-08-13 13:00:00 14.0\n", "2023-08-13 12:00:00 7.0\n", "2023-08-13 11:00:00 5.0\n", "2023-08-13 10:00:00 9.0\n", "2023-08-13 09:00:00 7.0\n", "2023-08-13 08:00:00 3.0\n", "2023-08-13 07:00:00 3.0\n", "2023-08-13 06:00:00 NaN\n", "2023-08-13 05:00:00 NaN\n", "2023-08-13 04:00:00 NaN\n", "2023-08-13 03:00:00 NaN\n", "Name: Viento velocidad, dtype: float64" ] }, "execution_count": 168, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df['Viento velocidad'].str.slice(stop=-5).apply(float)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Entrada / salida" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Aunque es posible definir un dataframe directamente, como hemos hecho en apartados anteriores, es más habitual leer los datos de uno varios ficheros. Para leer ficheros csv (el caso más habitual) utilizaremos la función *read_csv*." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Esta función tiene una gran cantidad de argumentos opcionales posibles, aunque en su versión más simple, solo necesita un argumento, el nombre de fichero. Otros argumentos que usaremos a menudo son: *sep*, *header*, *skiprows*, *index_col*, *names*, *parse_dates* y *usecols*." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Por ejemplo, si queremos leer la columna de la temperatura (T (°C)) del fichero *buenos_aires_20230813.txt*:" ] }, { "cell_type": "code", "execution_count": 170, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Fecha,Hora,Estado,T (�C),ST (�C),HR (%),Viento direcci�n,Viento velocidad,Presi�n,Visibilidad\r", "\r\n", "14/08/2023,0:00,Nublado,12.8,No se calcula,37,Noroeste,9 km/h,1014.8 hPa,10 km\r", "\r\n", "13/08/2023,23:00,Nublado,13,No se calcula,37,Noroeste,16 km/h,1015.2 hPa,10 km\r", "\r\n", "13/08/2023,22:00,Nublado,13.2,No se calcula,43,Norte,7 km/h,1015.6 hPa,10 km\r", "\r\n", "13/08/2023,21:00,Mayormente nublado,13.8,No se calcula,38,Norte,11 km/h,1015 hPa,10 km\r", "\r\n", "13/08/2023,20:00,Mayormente nublado,14.9,No se calcula,33,Norte,9 km/h,1015.2 hPa,10 km\r", "\r\n", "13/08/2023,19:00,Mayormente nublado,14.7,No se calcula,32,Norte,13 km/h,1015.6 hPa,10 km\r", "\r\n", "13/08/2023,18:00,Parcialmente nublado,15.6,No se calcula,26,Norte,7 km/h,1015.6 hPa,10 km\r", "\r\n", "13/08/2023,17:00,Parcialmente nublado,16.2,No se calcula,25,Norte,14 km/h,1016 hPa,10 km\r", "\r\n", "13/08/2023,16:00,Algo nublado,17.2,No se calcula,25,Norte,16 km/h,1016.6 hPa,10 km\r", "\r\n" ] } ], "source": [ "!head buenos_aires_20230813.txt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "escribiríamos, por ejemplo:" ] }, { "cell_type": "code", "execution_count": 171, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
T (°C)
Fecha
14/08/202312.8
13/08/202313.0
13/08/202313.2
13/08/202313.8
13/08/202314.9
13/08/202314.7
13/08/202315.6
13/08/202316.2
13/08/202317.2
13/08/202316.9
13/08/202316.3
13/08/202315.2
13/08/202314.4
13/08/202312.9
13/08/202310.8
13/08/20238.6
13/08/20235.3
13/08/20234.0
13/08/20233.1
13/08/20233.2
13/08/20233.4
13/08/20233.7
\n", "
" ], "text/plain": [ " T (°C)\n", "Fecha \n", "14/08/2023 12.8\n", "13/08/2023 13.0\n", "13/08/2023 13.2\n", "13/08/2023 13.8\n", "13/08/2023 14.9\n", "13/08/2023 14.7\n", "13/08/2023 15.6\n", "13/08/2023 16.2\n", "13/08/2023 17.2\n", "13/08/2023 16.9\n", "13/08/2023 16.3\n", "13/08/2023 15.2\n", "13/08/2023 14.4\n", "13/08/2023 12.9\n", "13/08/2023 10.8\n", "13/08/2023 8.6\n", "13/08/2023 5.3\n", "13/08/2023 4.0\n", "13/08/2023 3.1\n", "13/08/2023 3.2\n", "13/08/2023 3.4\n", "13/08/2023 3.7" ] }, "execution_count": 171, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.read_csv(\"buenos_aires_20230813.txt\",\n", " sep=\",\", encoding = \"ISO-8859-1\", index_col=0, header=0, usecols=[0,3])\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- *encoding=\"ISO-8859-1\"* indica que no estamos utilizando las letras del inglés, sino las del español, (así podemos usar tildes). \n", "- *header=0* indica que la primera línea es la cabecera. \n", "- *usecols=[0,3]* indica que tomamos la primera (la fecha) y la cuarta columna (la temperatura). \n", "\n", "Notar que solo ha tomado la primera columna, la fecha, como índice" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Observar que read_csv nos permite hacer conversiones automáticamente, por ejemplo nos permite crear el índice a la vez que leemos el fichero. Pero podemos hacer esto mismo en dos pasos:" ] }, { "cell_type": "code", "execution_count": 172, "metadata": {}, "outputs": [], "source": [ "df = pd.read_csv(\"buenos_aires_20230813.txt\",\n", " sep=\",\", encoding = \"ISO-8859-1\", header=0, usecols=[0,3])\n", "df = df.set_index('Fecha')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Aunque read_csv trata de convertir al tipo adecuado cada columna (por ejemplo para *floats*), no hace esta conversión para objetos tipo datetime. Para ello podemos usar el argumento *parse_dates*, que además nos permite combinar el campo de la fecha y de la hora y así obtener un campo datetime bien formado:" ] }, { "cell_type": "code", "execution_count": 173, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EstadoT (°C)ST (°C)HR (%)Viento direcciónViento velocidadPresiónVisibilidad
Fecha_Hora
2023-08-14 00:00:00Nublado12.8No se calcula37Noroeste9 km/h1014.8 hPa10 km
2023-08-13 23:00:00Nublado13.0No se calcula37Noroeste16 km/h1015.2 hPa10 km
2023-08-13 22:00:00Nublado13.2No se calcula43Norte7 km/h1015.6 hPa10 km
2023-08-13 21:00:00Mayormente nublado13.8No se calcula38Norte11 km/h1015 hPa10 km
2023-08-13 20:00:00Mayormente nublado14.9No se calcula33Norte9 km/h1015.2 hPa10 km
2023-08-13 19:00:00Mayormente nublado14.7No se calcula32Norte13 km/h1015.6 hPa10 km
2023-08-13 18:00:00Parcialmente nublado15.6No se calcula26Norte7 km/h1015.6 hPa10 km
2023-08-13 17:00:00Parcialmente nublado16.2No se calcula25Norte14 km/h1016 hPa10 km
2023-08-13 16:00:00Algo nublado17.2No se calcula25Norte16 km/h1016.6 hPa10 km
2023-08-13 15:00:00Algo nublado16.9No se calcula24Norte16 km/h1017.7 hPa10 km
2023-08-13 14:00:00Ligeramente nublado16.3No se calcula23Norte13 km/h1019.4 hPa10 km
2023-08-13 13:00:00Ligeramente nublado15.2No se calcula25Norte14 km/h1020.6 hPa10 km
2023-08-13 12:00:00Ligeramente nublado14.4No se calcula27Norte7 km/h1021.7 hPa10 km
2023-08-13 11:00:00Ligeramente nublado12.9No se calcula30Noroeste5 km/h1023.2 hPa10 km
2023-08-13 10:00:00Ligeramente nublado10.8No se calcula34Norte9 km/h1023.3 hPa10 km
2023-08-13 09:00:00Ligeramente nublado8.67.544Noroeste7 km/h1022.9 hPa10 km
2023-08-13 08:00:00Ligeramente nublado5.3No se calcula59Norte3 km/h1023.2 hPa10 km
2023-08-13 07:00:00Despejado4.0No se calcula70Oeste3 km/h1023.2 hPa10 km
2023-08-13 06:00:00Despejado3.1No se calcula71CalmaNaN1022.8 hPa10 km
2023-08-13 05:00:00Despejado3.2No se calcula71CalmaNaN1022.8 hPa10 km
2023-08-13 04:00:00Despejado3.4No se calcula70CalmaNaN1023.3 hPa10 km
2023-08-13 03:00:00Despejado3.7No se calcula72CalmaNaN1023.7 hPa10 km
\n", "
" ], "text/plain": [ " Estado T (°C) ST (°C) HR (%) \\\n", "Fecha_Hora \n", "2023-08-14 00:00:00 Nublado 12.8 No se calcula 37 \n", "2023-08-13 23:00:00 Nublado 13.0 No se calcula 37 \n", "2023-08-13 22:00:00 Nublado 13.2 No se calcula 43 \n", "2023-08-13 21:00:00 Mayormente nublado 13.8 No se calcula 38 \n", "2023-08-13 20:00:00 Mayormente nublado 14.9 No se calcula 33 \n", "2023-08-13 19:00:00 Mayormente nublado 14.7 No se calcula 32 \n", "2023-08-13 18:00:00 Parcialmente nublado 15.6 No se calcula 26 \n", "2023-08-13 17:00:00 Parcialmente nublado 16.2 No se calcula 25 \n", "2023-08-13 16:00:00 Algo nublado 17.2 No se calcula 25 \n", "2023-08-13 15:00:00 Algo nublado 16.9 No se calcula 24 \n", "2023-08-13 14:00:00 Ligeramente nublado 16.3 No se calcula 23 \n", "2023-08-13 13:00:00 Ligeramente nublado 15.2 No se calcula 25 \n", "2023-08-13 12:00:00 Ligeramente nublado 14.4 No se calcula 27 \n", "2023-08-13 11:00:00 Ligeramente nublado 12.9 No se calcula 30 \n", "2023-08-13 10:00:00 Ligeramente nublado 10.8 No se calcula 34 \n", "2023-08-13 09:00:00 Ligeramente nublado 8.6 7.5 44 \n", "2023-08-13 08:00:00 Ligeramente nublado 5.3 No se calcula 59 \n", "2023-08-13 07:00:00 Despejado 4.0 No se calcula 70 \n", "2023-08-13 06:00:00 Despejado 3.1 No se calcula 71 \n", "2023-08-13 05:00:00 Despejado 3.2 No se calcula 71 \n", "2023-08-13 04:00:00 Despejado 3.4 No se calcula 70 \n", "2023-08-13 03:00:00 Despejado 3.7 No se calcula 72 \n", "\n", " Viento dirección Viento velocidad Presión Visibilidad \n", "Fecha_Hora \n", "2023-08-14 00:00:00 Noroeste 9 km/h 1014.8 hPa 10 km \n", "2023-08-13 23:00:00 Noroeste 16 km/h 1015.2 hPa 10 km \n", "2023-08-13 22:00:00 Norte 7 km/h 1015.6 hPa 10 km \n", "2023-08-13 21:00:00 Norte 11 km/h 1015 hPa 10 km \n", "2023-08-13 20:00:00 Norte 9 km/h 1015.2 hPa 10 km \n", "2023-08-13 19:00:00 Norte 13 km/h 1015.6 hPa 10 km \n", "2023-08-13 18:00:00 Norte 7 km/h 1015.6 hPa 10 km \n", "2023-08-13 17:00:00 Norte 14 km/h 1016 hPa 10 km \n", "2023-08-13 16:00:00 Norte 16 km/h 1016.6 hPa 10 km \n", "2023-08-13 15:00:00 Norte 16 km/h 1017.7 hPa 10 km \n", "2023-08-13 14:00:00 Norte 13 km/h 1019.4 hPa 10 km \n", "2023-08-13 13:00:00 Norte 14 km/h 1020.6 hPa 10 km \n", "2023-08-13 12:00:00 Norte 7 km/h 1021.7 hPa 10 km \n", "2023-08-13 11:00:00 Noroeste 5 km/h 1023.2 hPa 10 km \n", "2023-08-13 10:00:00 Norte 9 km/h 1023.3 hPa 10 km \n", "2023-08-13 09:00:00 Noroeste 7 km/h 1022.9 hPa 10 km \n", "2023-08-13 08:00:00 Norte 3 km/h 1023.2 hPa 10 km \n", "2023-08-13 07:00:00 Oeste 3 km/h 1023.2 hPa 10 km \n", "2023-08-13 06:00:00 Calma NaN 1022.8 hPa 10 km \n", "2023-08-13 05:00:00 Calma NaN 1022.8 hPa 10 km \n", "2023-08-13 04:00:00 Calma NaN 1023.3 hPa 10 km \n", "2023-08-13 03:00:00 Calma NaN 1023.7 hPa 10 km " ] }, "execution_count": 173, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.read_csv(\"buenos_aires_20230813.txt\", parse_dates=[[0,1]], sep=\",\",\n", " index_col=0, encoding = \"ISO-8859-1\")\n", "# También podríamos haber tomado parse_dates=[['Fecha', 'Hora']]\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Otra alternativa es hacer esta conversión separadamente, utilizando la función *to_datetime*:" ] }, { "cell_type": "code", "execution_count": 174, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FechaHoraEstadoT (°C)ST (°C)HR (%)Viento direcciónViento velocidadPresiónVisibilidadFecha_Hora
014/08/20230:00Nublado12.8No se calcula37Noroeste9 km/h1014.8 hPa10 km2023-08-14 00:00:00
113/08/202323:00Nublado13.0No se calcula37Noroeste16 km/h1015.2 hPa10 km2023-08-13 23:00:00
213/08/202322:00Nublado13.2No se calcula43Norte7 km/h1015.6 hPa10 km2023-08-13 22:00:00
313/08/202321:00Mayormente nublado13.8No se calcula38Norte11 km/h1015 hPa10 km2023-08-13 21:00:00
413/08/202320:00Mayormente nublado14.9No se calcula33Norte9 km/h1015.2 hPa10 km2023-08-13 20:00:00
513/08/202319:00Mayormente nublado14.7No se calcula32Norte13 km/h1015.6 hPa10 km2023-08-13 19:00:00
613/08/202318:00Parcialmente nublado15.6No se calcula26Norte7 km/h1015.6 hPa10 km2023-08-13 18:00:00
713/08/202317:00Parcialmente nublado16.2No se calcula25Norte14 km/h1016 hPa10 km2023-08-13 17:00:00
813/08/202316:00Algo nublado17.2No se calcula25Norte16 km/h1016.6 hPa10 km2023-08-13 16:00:00
913/08/202315:00Algo nublado16.9No se calcula24Norte16 km/h1017.7 hPa10 km2023-08-13 15:00:00
1013/08/202314:00Ligeramente nublado16.3No se calcula23Norte13 km/h1019.4 hPa10 km2023-08-13 14:00:00
1113/08/202313:00Ligeramente nublado15.2No se calcula25Norte14 km/h1020.6 hPa10 km2023-08-13 13:00:00
1213/08/202312:00Ligeramente nublado14.4No se calcula27Norte7 km/h1021.7 hPa10 km2023-08-13 12:00:00
1313/08/202311:00Ligeramente nublado12.9No se calcula30Noroeste5 km/h1023.2 hPa10 km2023-08-13 11:00:00
1413/08/202310:00Ligeramente nublado10.8No se calcula34Norte9 km/h1023.3 hPa10 km2023-08-13 10:00:00
1513/08/20239:00Ligeramente nublado8.67.544Noroeste7 km/h1022.9 hPa10 km2023-08-13 09:00:00
1613/08/20238:00Ligeramente nublado5.3No se calcula59Norte3 km/h1023.2 hPa10 km2023-08-13 08:00:00
1713/08/20237:00Despejado4.0No se calcula70Oeste3 km/h1023.2 hPa10 km2023-08-13 07:00:00
1813/08/20236:00Despejado3.1No se calcula71CalmaNaN1022.8 hPa10 km2023-08-13 06:00:00
1913/08/20235:00Despejado3.2No se calcula71CalmaNaN1022.8 hPa10 km2023-08-13 05:00:00
2013/08/20234:00Despejado3.4No se calcula70CalmaNaN1023.3 hPa10 km2023-08-13 04:00:00
2113/08/20233:00Despejado3.7No se calcula72CalmaNaN1023.7 hPa10 km2023-08-13 03:00:00
\n", "
" ], "text/plain": [ " Fecha Hora Estado T (°C) ST (°C) HR (%) \\\n", "0 14/08/2023 0:00 Nublado 12.8 No se calcula 37 \n", "1 13/08/2023 23:00 Nublado 13.0 No se calcula 37 \n", "2 13/08/2023 22:00 Nublado 13.2 No se calcula 43 \n", "3 13/08/2023 21:00 Mayormente nublado 13.8 No se calcula 38 \n", "4 13/08/2023 20:00 Mayormente nublado 14.9 No se calcula 33 \n", "5 13/08/2023 19:00 Mayormente nublado 14.7 No se calcula 32 \n", "6 13/08/2023 18:00 Parcialmente nublado 15.6 No se calcula 26 \n", "7 13/08/2023 17:00 Parcialmente nublado 16.2 No se calcula 25 \n", "8 13/08/2023 16:00 Algo nublado 17.2 No se calcula 25 \n", "9 13/08/2023 15:00 Algo nublado 16.9 No se calcula 24 \n", "10 13/08/2023 14:00 Ligeramente nublado 16.3 No se calcula 23 \n", "11 13/08/2023 13:00 Ligeramente nublado 15.2 No se calcula 25 \n", "12 13/08/2023 12:00 Ligeramente nublado 14.4 No se calcula 27 \n", "13 13/08/2023 11:00 Ligeramente nublado 12.9 No se calcula 30 \n", "14 13/08/2023 10:00 Ligeramente nublado 10.8 No se calcula 34 \n", "15 13/08/2023 9:00 Ligeramente nublado 8.6 7.5 44 \n", "16 13/08/2023 8:00 Ligeramente nublado 5.3 No se calcula 59 \n", "17 13/08/2023 7:00 Despejado 4.0 No se calcula 70 \n", "18 13/08/2023 6:00 Despejado 3.1 No se calcula 71 \n", "19 13/08/2023 5:00 Despejado 3.2 No se calcula 71 \n", "20 13/08/2023 4:00 Despejado 3.4 No se calcula 70 \n", "21 13/08/2023 3:00 Despejado 3.7 No se calcula 72 \n", "\n", " Viento dirección Viento velocidad Presión Visibilidad \\\n", "0 Noroeste 9 km/h 1014.8 hPa 10 km \n", "1 Noroeste 16 km/h 1015.2 hPa 10 km \n", "2 Norte 7 km/h 1015.6 hPa 10 km \n", "3 Norte 11 km/h 1015 hPa 10 km \n", "4 Norte 9 km/h 1015.2 hPa 10 km \n", "5 Norte 13 km/h 1015.6 hPa 10 km \n", "6 Norte 7 km/h 1015.6 hPa 10 km \n", "7 Norte 14 km/h 1016 hPa 10 km \n", "8 Norte 16 km/h 1016.6 hPa 10 km \n", "9 Norte 16 km/h 1017.7 hPa 10 km \n", "10 Norte 13 km/h 1019.4 hPa 10 km \n", "11 Norte 14 km/h 1020.6 hPa 10 km \n", "12 Norte 7 km/h 1021.7 hPa 10 km \n", "13 Noroeste 5 km/h 1023.2 hPa 10 km \n", "14 Norte 9 km/h 1023.3 hPa 10 km \n", "15 Noroeste 7 km/h 1022.9 hPa 10 km \n", "16 Norte 3 km/h 1023.2 hPa 10 km \n", "17 Oeste 3 km/h 1023.2 hPa 10 km \n", "18 Calma NaN 1022.8 hPa 10 km \n", "19 Calma NaN 1022.8 hPa 10 km \n", "20 Calma NaN 1023.3 hPa 10 km \n", "21 Calma NaN 1023.7 hPa 10 km \n", "\n", " Fecha_Hora \n", "0 2023-08-14 00:00:00 \n", "1 2023-08-13 23:00:00 \n", "2 2023-08-13 22:00:00 \n", "3 2023-08-13 21:00:00 \n", "4 2023-08-13 20:00:00 \n", "5 2023-08-13 19:00:00 \n", "6 2023-08-13 18:00:00 \n", "7 2023-08-13 17:00:00 \n", "8 2023-08-13 16:00:00 \n", "9 2023-08-13 15:00:00 \n", "10 2023-08-13 14:00:00 \n", "11 2023-08-13 13:00:00 \n", "12 2023-08-13 12:00:00 \n", "13 2023-08-13 11:00:00 \n", "14 2023-08-13 10:00:00 \n", "15 2023-08-13 09:00:00 \n", "16 2023-08-13 08:00:00 \n", "17 2023-08-13 07:00:00 \n", "18 2023-08-13 06:00:00 \n", "19 2023-08-13 05:00:00 \n", "20 2023-08-13 04:00:00 \n", "21 2023-08-13 03:00:00 " ] }, "execution_count": 174, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.read_csv(\"buenos_aires_20230813.txt\", sep=\",\", encoding = \"ISO-8859-1\")\n", "df[\"Fecha_Hora\"] = pd.to_datetime(df[\"Fecha\"] + \" \" + df[\"Hora\"], format=\"%d/%m/%Y %H:%M\")\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ahora ya tiene el formato datetime:" ] }, { "cell_type": "code", "execution_count": 175, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Fecha object\n", "Hora object\n", "Estado object\n", "T (°C) float64\n", "ST (°C) object\n", "HR (%) int64\n", "Viento dirección object\n", "Viento velocidad object\n", "Presión object\n", "Visibilidad object\n", "Fecha_Hora datetime64[ns]\n", "dtype: object\n" ] } ], "source": [ "print(df.dtypes)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "También disponemos del argumento *converters* para forzar cambios de tipo que *read_csv* no haga apropiadamente." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "O, un poco más corto:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Nota:** En general *read_csv* espera que el fichero csv tenga siempre el número de columnas correcto. De todas formas, el argumento *on_bad_lines* y *warn_bad_lines* puede ayudarnos a controlar ficheros mal formateados, hasta cierto punto." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "También existe la función *read_fwf*, que permite leer ficheros donde no hay separadores, sino que cada columna tiene una longitud fija." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Para volcar un dataframe a un fichero utilizaremos el método *to_csv*. Tiene argumentos parecidos." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Además de ficheros csv, Pandas es capaz de leer directamente muchos otros formatos, como HDF (*read_hdf*), json (*read_json*) o SQL (*read_sql*), o tablas de html (*read_html*)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "En particular, es capaz de leer ficheros Excel también (utiliza el módulo xlrd, que no es parte de la librería estándar)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Datos nulos" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pandas utiliza el valor *np.nan* para representar datos nulos o no conocidos. Por ejemplo en nuestro dataframe con datos de Buenos Aires, no hay dato de velocidad del viento entre las 3 y las 6 de la madrugada:" ] }, { "cell_type": "code", "execution_count": 182, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EstadoT (°C)ST (°C)HR (%)Viento direcciónViento velocidadPresiónVisibilidad
Fecha_Hora
2023-08-14 00:00:00Nublado12.8No se calcula37Noroeste9 km/h1014.8 hPa10 km
2023-08-13 23:00:00Nublado13.0No se calcula37Noroeste16 km/h1015.2 hPa10 km
2023-08-13 22:00:00Nublado13.2No se calcula43Norte7 km/h1015.6 hPa10 km
2023-08-13 21:00:00Mayormente nublado13.8No se calcula38Norte11 km/h1015 hPa10 km
2023-08-13 20:00:00Mayormente nublado14.9No se calcula33Norte9 km/h1015.2 hPa10 km
2023-08-13 19:00:00Mayormente nublado14.7No se calcula32Norte13 km/h1015.6 hPa10 km
2023-08-13 18:00:00Parcialmente nublado15.6No se calcula26Norte7 km/h1015.6 hPa10 km
2023-08-13 17:00:00Parcialmente nublado16.2No se calcula25Norte14 km/h1016 hPa10 km
2023-08-13 16:00:00Algo nublado17.2No se calcula25Norte16 km/h1016.6 hPa10 km
2023-08-13 15:00:00Algo nublado16.9No se calcula24Norte16 km/h1017.7 hPa10 km
2023-08-13 14:00:00Ligeramente nublado16.3No se calcula23Norte13 km/h1019.4 hPa10 km
2023-08-13 13:00:00Ligeramente nublado15.2No se calcula25Norte14 km/h1020.6 hPa10 km
2023-08-13 12:00:00Ligeramente nublado14.4No se calcula27Norte7 km/h1021.7 hPa10 km
2023-08-13 11:00:00Ligeramente nublado12.9No se calcula30Noroeste5 km/h1023.2 hPa10 km
2023-08-13 10:00:00Ligeramente nublado10.8No se calcula34Norte9 km/h1023.3 hPa10 km
2023-08-13 09:00:00Ligeramente nublado8.67.544Noroeste7 km/h1022.9 hPa10 km
2023-08-13 08:00:00Ligeramente nublado5.3No se calcula59Norte3 km/h1023.2 hPa10 km
2023-08-13 07:00:00Despejado4.0No se calcula70Oeste3 km/h1023.2 hPa10 km
2023-08-13 06:00:00Despejado3.1No se calcula71CalmaNaN1022.8 hPa10 km
2023-08-13 05:00:00Despejado3.2No se calcula71CalmaNaN1022.8 hPa10 km
2023-08-13 04:00:00Despejado3.4No se calcula70CalmaNaN1023.3 hPa10 km
2023-08-13 03:00:00Despejado3.7No se calcula72CalmaNaN1023.7 hPa10 km
\n", "
" ], "text/plain": [ " Estado T (°C) ST (°C) HR (%) \\\n", "Fecha_Hora \n", "2023-08-14 00:00:00 Nublado 12.8 No se calcula 37 \n", "2023-08-13 23:00:00 Nublado 13.0 No se calcula 37 \n", "2023-08-13 22:00:00 Nublado 13.2 No se calcula 43 \n", "2023-08-13 21:00:00 Mayormente nublado 13.8 No se calcula 38 \n", "2023-08-13 20:00:00 Mayormente nublado 14.9 No se calcula 33 \n", "2023-08-13 19:00:00 Mayormente nublado 14.7 No se calcula 32 \n", "2023-08-13 18:00:00 Parcialmente nublado 15.6 No se calcula 26 \n", "2023-08-13 17:00:00 Parcialmente nublado 16.2 No se calcula 25 \n", "2023-08-13 16:00:00 Algo nublado 17.2 No se calcula 25 \n", "2023-08-13 15:00:00 Algo nublado 16.9 No se calcula 24 \n", "2023-08-13 14:00:00 Ligeramente nublado 16.3 No se calcula 23 \n", "2023-08-13 13:00:00 Ligeramente nublado 15.2 No se calcula 25 \n", "2023-08-13 12:00:00 Ligeramente nublado 14.4 No se calcula 27 \n", "2023-08-13 11:00:00 Ligeramente nublado 12.9 No se calcula 30 \n", "2023-08-13 10:00:00 Ligeramente nublado 10.8 No se calcula 34 \n", "2023-08-13 09:00:00 Ligeramente nublado 8.6 7.5 44 \n", "2023-08-13 08:00:00 Ligeramente nublado 5.3 No se calcula 59 \n", "2023-08-13 07:00:00 Despejado 4.0 No se calcula 70 \n", "2023-08-13 06:00:00 Despejado 3.1 No se calcula 71 \n", "2023-08-13 05:00:00 Despejado 3.2 No se calcula 71 \n", "2023-08-13 04:00:00 Despejado 3.4 No se calcula 70 \n", "2023-08-13 03:00:00 Despejado 3.7 No se calcula 72 \n", "\n", " Viento dirección Viento velocidad Presión Visibilidad \n", "Fecha_Hora \n", "2023-08-14 00:00:00 Noroeste 9 km/h 1014.8 hPa 10 km \n", "2023-08-13 23:00:00 Noroeste 16 km/h 1015.2 hPa 10 km \n", "2023-08-13 22:00:00 Norte 7 km/h 1015.6 hPa 10 km \n", "2023-08-13 21:00:00 Norte 11 km/h 1015 hPa 10 km \n", "2023-08-13 20:00:00 Norte 9 km/h 1015.2 hPa 10 km \n", "2023-08-13 19:00:00 Norte 13 km/h 1015.6 hPa 10 km \n", "2023-08-13 18:00:00 Norte 7 km/h 1015.6 hPa 10 km \n", "2023-08-13 17:00:00 Norte 14 km/h 1016 hPa 10 km \n", "2023-08-13 16:00:00 Norte 16 km/h 1016.6 hPa 10 km \n", "2023-08-13 15:00:00 Norte 16 km/h 1017.7 hPa 10 km \n", "2023-08-13 14:00:00 Norte 13 km/h 1019.4 hPa 10 km \n", "2023-08-13 13:00:00 Norte 14 km/h 1020.6 hPa 10 km \n", "2023-08-13 12:00:00 Norte 7 km/h 1021.7 hPa 10 km \n", "2023-08-13 11:00:00 Noroeste 5 km/h 1023.2 hPa 10 km \n", "2023-08-13 10:00:00 Norte 9 km/h 1023.3 hPa 10 km \n", "2023-08-13 09:00:00 Noroeste 7 km/h 1022.9 hPa 10 km \n", "2023-08-13 08:00:00 Norte 3 km/h 1023.2 hPa 10 km \n", "2023-08-13 07:00:00 Oeste 3 km/h 1023.2 hPa 10 km \n", "2023-08-13 06:00:00 Calma NaN 1022.8 hPa 10 km \n", "2023-08-13 05:00:00 Calma NaN 1022.8 hPa 10 km \n", "2023-08-13 04:00:00 Calma NaN 1023.3 hPa 10 km \n", "2023-08-13 03:00:00 Calma NaN 1023.7 hPa 10 km " ] }, "execution_count": 182, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.read_csv(\"buenos_aires_20230813.txt\", parse_dates=[[0,1]], sep=\",\",\n", " index_col=0, encoding = \"ISO-8859-1\")\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Por defecto estos valores no son incluidos en las operaciones, aunque es conveniente examinar cada función para estar seguro. Por ejemplo:" ] }, { "cell_type": "code", "execution_count": 183, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "22" ] }, "execution_count": 183, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(df)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "pero por otra parte:" ] }, { "cell_type": "code", "execution_count": 185, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Estado 22\n", "T (°C) 22\n", "ST (°C) 22\n", "HR (%) 22\n", "Viento dirección 22\n", "Viento velocidad 18\n", "Presión 22\n", "Visibilidad 22\n", "dtype: int64" ] }, "execution_count": 185, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.count()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Algunas funciones, como ``mean``, tienen un argumento (*skipna* en este caso), para decidir si se incluyen o no los NaN (por defecto skipna=True, y no los incluirá)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Por ejemplo, si convertimos la velocidad del viento a un valor numérico, y calculamos su media, vemos que:" ] }, { "cell_type": "code", "execution_count": 190, "metadata": {}, "outputs": [], "source": [ "df['Vel.Viento']=df['Viento velocidad'].str.slice(stop=-5).apply(float)" ] }, { "cell_type": "code", "execution_count": 195, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "9.944444444444445" ] }, "execution_count": 195, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df['Vel.Viento'].mean()" ] }, { "cell_type": "code", "execution_count": 206, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "9.944444444444445" ] }, "execution_count": 206, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df['Vel.Viento'][0:18].mean()" ] }, { "cell_type": "code", "execution_count": 207, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "nan" ] }, "execution_count": 207, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df['Vel.Viento'].mean(skipna=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Las funciones ``isnull`` y ``notnull`` nos dirán si un valor es igual a NaN. ¡No hagáis comparaciones del tipo x==np.nan!" ] }, { "cell_type": "code", "execution_count": 208, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EstadoT (°C)ST (°C)HR (%)Viento direcciónViento velocidadPresiónVisibilidadVel.Viento
Fecha_Hora
2023-08-14 00:00:00FalseFalseFalseFalseFalseFalseFalseFalseFalse
2023-08-13 23:00:00FalseFalseFalseFalseFalseFalseFalseFalseFalse
2023-08-13 22:00:00FalseFalseFalseFalseFalseFalseFalseFalseFalse
2023-08-13 21:00:00FalseFalseFalseFalseFalseFalseFalseFalseFalse
2023-08-13 20:00:00FalseFalseFalseFalseFalseFalseFalseFalseFalse
2023-08-13 19:00:00FalseFalseFalseFalseFalseFalseFalseFalseFalse
2023-08-13 18:00:00FalseFalseFalseFalseFalseFalseFalseFalseFalse
2023-08-13 17:00:00FalseFalseFalseFalseFalseFalseFalseFalseFalse
2023-08-13 16:00:00FalseFalseFalseFalseFalseFalseFalseFalseFalse
2023-08-13 15:00:00FalseFalseFalseFalseFalseFalseFalseFalseFalse
2023-08-13 14:00:00FalseFalseFalseFalseFalseFalseFalseFalseFalse
2023-08-13 13:00:00FalseFalseFalseFalseFalseFalseFalseFalseFalse
2023-08-13 12:00:00FalseFalseFalseFalseFalseFalseFalseFalseFalse
2023-08-13 11:00:00FalseFalseFalseFalseFalseFalseFalseFalseFalse
2023-08-13 10:00:00FalseFalseFalseFalseFalseFalseFalseFalseFalse
2023-08-13 09:00:00FalseFalseFalseFalseFalseFalseFalseFalseFalse
2023-08-13 08:00:00FalseFalseFalseFalseFalseFalseFalseFalseFalse
2023-08-13 07:00:00FalseFalseFalseFalseFalseFalseFalseFalseFalse
2023-08-13 06:00:00FalseFalseFalseFalseFalseTrueFalseFalseTrue
2023-08-13 05:00:00FalseFalseFalseFalseFalseTrueFalseFalseTrue
2023-08-13 04:00:00FalseFalseFalseFalseFalseTrueFalseFalseTrue
2023-08-13 03:00:00FalseFalseFalseFalseFalseTrueFalseFalseTrue
\n", "
" ], "text/plain": [ " Estado T (°C) ST (°C) HR (%) Viento dirección \\\n", "Fecha_Hora \n", "2023-08-14 00:00:00 False False False False False \n", "2023-08-13 23:00:00 False False False False False \n", "2023-08-13 22:00:00 False False False False False \n", "2023-08-13 21:00:00 False False False False False \n", "2023-08-13 20:00:00 False False False False False \n", "2023-08-13 19:00:00 False False False False False \n", "2023-08-13 18:00:00 False False False False False \n", "2023-08-13 17:00:00 False False False False False \n", "2023-08-13 16:00:00 False False False False False \n", "2023-08-13 15:00:00 False False False False False \n", "2023-08-13 14:00:00 False False False False False \n", "2023-08-13 13:00:00 False False False False False \n", "2023-08-13 12:00:00 False False False False False \n", "2023-08-13 11:00:00 False False False False False \n", "2023-08-13 10:00:00 False False False False False \n", "2023-08-13 09:00:00 False False False False False \n", "2023-08-13 08:00:00 False False False False False \n", "2023-08-13 07:00:00 False False False False False \n", "2023-08-13 06:00:00 False False False False False \n", "2023-08-13 05:00:00 False False False False False \n", "2023-08-13 04:00:00 False False False False False \n", "2023-08-13 03:00:00 False False False False False \n", "\n", " Viento velocidad Presión Visibilidad Vel.Viento \n", "Fecha_Hora \n", "2023-08-14 00:00:00 False False False False \n", "2023-08-13 23:00:00 False False False False \n", "2023-08-13 22:00:00 False False False False \n", "2023-08-13 21:00:00 False False False False \n", "2023-08-13 20:00:00 False False False False \n", "2023-08-13 19:00:00 False False False False \n", "2023-08-13 18:00:00 False False False False \n", "2023-08-13 17:00:00 False False False False \n", "2023-08-13 16:00:00 False False False False \n", "2023-08-13 15:00:00 False False False False \n", "2023-08-13 14:00:00 False False False False \n", "2023-08-13 13:00:00 False False False False \n", "2023-08-13 12:00:00 False False False False \n", "2023-08-13 11:00:00 False False False False \n", "2023-08-13 10:00:00 False False False False \n", "2023-08-13 09:00:00 False False False False \n", "2023-08-13 08:00:00 False False False False \n", "2023-08-13 07:00:00 False False False False \n", "2023-08-13 06:00:00 True False False True \n", "2023-08-13 05:00:00 True False False True \n", "2023-08-13 04:00:00 True False False True \n", "2023-08-13 03:00:00 True False False True " ] }, "execution_count": 208, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.isnull(df)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Se pueden eliminar las filas con valores NaN con el método ``dropna``:" ] }, { "cell_type": "code", "execution_count": 211, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EstadoT (°C)ST (°C)HR (%)Viento direcciónViento velocidadPresiónVisibilidadVel.Viento
Fecha_Hora
2023-08-14 00:00:00Nublado12.8No se calcula37Noroeste9 km/h1014.8 hPa10 km9.0
2023-08-13 23:00:00Nublado13.0No se calcula37Noroeste16 km/h1015.2 hPa10 km16.0
2023-08-13 22:00:00Nublado13.2No se calcula43Norte7 km/h1015.6 hPa10 km7.0
2023-08-13 21:00:00Mayormente nublado13.8No se calcula38Norte11 km/h1015 hPa10 km11.0
2023-08-13 20:00:00Mayormente nublado14.9No se calcula33Norte9 km/h1015.2 hPa10 km9.0
2023-08-13 19:00:00Mayormente nublado14.7No se calcula32Norte13 km/h1015.6 hPa10 km13.0
2023-08-13 18:00:00Parcialmente nublado15.6No se calcula26Norte7 km/h1015.6 hPa10 km7.0
2023-08-13 17:00:00Parcialmente nublado16.2No se calcula25Norte14 km/h1016 hPa10 km14.0
2023-08-13 16:00:00Algo nublado17.2No se calcula25Norte16 km/h1016.6 hPa10 km16.0
2023-08-13 15:00:00Algo nublado16.9No se calcula24Norte16 km/h1017.7 hPa10 km16.0
2023-08-13 14:00:00Ligeramente nublado16.3No se calcula23Norte13 km/h1019.4 hPa10 km13.0
2023-08-13 13:00:00Ligeramente nublado15.2No se calcula25Norte14 km/h1020.6 hPa10 km14.0
2023-08-13 12:00:00Ligeramente nublado14.4No se calcula27Norte7 km/h1021.7 hPa10 km7.0
2023-08-13 11:00:00Ligeramente nublado12.9No se calcula30Noroeste5 km/h1023.2 hPa10 km5.0
2023-08-13 10:00:00Ligeramente nublado10.8No se calcula34Norte9 km/h1023.3 hPa10 km9.0
2023-08-13 09:00:00Ligeramente nublado8.67.544Noroeste7 km/h1022.9 hPa10 km7.0
2023-08-13 08:00:00Ligeramente nublado5.3No se calcula59Norte3 km/h1023.2 hPa10 km3.0
2023-08-13 07:00:00Despejado4.0No se calcula70Oeste3 km/h1023.2 hPa10 km3.0
\n", "
" ], "text/plain": [ " Estado T (°C) ST (°C) HR (%) \\\n", "Fecha_Hora \n", "2023-08-14 00:00:00 Nublado 12.8 No se calcula 37 \n", "2023-08-13 23:00:00 Nublado 13.0 No se calcula 37 \n", "2023-08-13 22:00:00 Nublado 13.2 No se calcula 43 \n", "2023-08-13 21:00:00 Mayormente nublado 13.8 No se calcula 38 \n", "2023-08-13 20:00:00 Mayormente nublado 14.9 No se calcula 33 \n", "2023-08-13 19:00:00 Mayormente nublado 14.7 No se calcula 32 \n", "2023-08-13 18:00:00 Parcialmente nublado 15.6 No se calcula 26 \n", "2023-08-13 17:00:00 Parcialmente nublado 16.2 No se calcula 25 \n", "2023-08-13 16:00:00 Algo nublado 17.2 No se calcula 25 \n", "2023-08-13 15:00:00 Algo nublado 16.9 No se calcula 24 \n", "2023-08-13 14:00:00 Ligeramente nublado 16.3 No se calcula 23 \n", "2023-08-13 13:00:00 Ligeramente nublado 15.2 No se calcula 25 \n", "2023-08-13 12:00:00 Ligeramente nublado 14.4 No se calcula 27 \n", "2023-08-13 11:00:00 Ligeramente nublado 12.9 No se calcula 30 \n", "2023-08-13 10:00:00 Ligeramente nublado 10.8 No se calcula 34 \n", "2023-08-13 09:00:00 Ligeramente nublado 8.6 7.5 44 \n", "2023-08-13 08:00:00 Ligeramente nublado 5.3 No se calcula 59 \n", "2023-08-13 07:00:00 Despejado 4.0 No se calcula 70 \n", "\n", " Viento dirección Viento velocidad Presión Visibilidad \\\n", "Fecha_Hora \n", "2023-08-14 00:00:00 Noroeste 9 km/h 1014.8 hPa 10 km \n", "2023-08-13 23:00:00 Noroeste 16 km/h 1015.2 hPa 10 km \n", "2023-08-13 22:00:00 Norte 7 km/h 1015.6 hPa 10 km \n", "2023-08-13 21:00:00 Norte 11 km/h 1015 hPa 10 km \n", "2023-08-13 20:00:00 Norte 9 km/h 1015.2 hPa 10 km \n", "2023-08-13 19:00:00 Norte 13 km/h 1015.6 hPa 10 km \n", "2023-08-13 18:00:00 Norte 7 km/h 1015.6 hPa 10 km \n", "2023-08-13 17:00:00 Norte 14 km/h 1016 hPa 10 km \n", "2023-08-13 16:00:00 Norte 16 km/h 1016.6 hPa 10 km \n", "2023-08-13 15:00:00 Norte 16 km/h 1017.7 hPa 10 km \n", "2023-08-13 14:00:00 Norte 13 km/h 1019.4 hPa 10 km \n", "2023-08-13 13:00:00 Norte 14 km/h 1020.6 hPa 10 km \n", "2023-08-13 12:00:00 Norte 7 km/h 1021.7 hPa 10 km \n", "2023-08-13 11:00:00 Noroeste 5 km/h 1023.2 hPa 10 km \n", "2023-08-13 10:00:00 Norte 9 km/h 1023.3 hPa 10 km \n", "2023-08-13 09:00:00 Noroeste 7 km/h 1022.9 hPa 10 km \n", "2023-08-13 08:00:00 Norte 3 km/h 1023.2 hPa 10 km \n", "2023-08-13 07:00:00 Oeste 3 km/h 1023.2 hPa 10 km \n", "\n", " Vel.Viento \n", "Fecha_Hora \n", "2023-08-14 00:00:00 9.0 \n", "2023-08-13 23:00:00 16.0 \n", "2023-08-13 22:00:00 7.0 \n", "2023-08-13 21:00:00 11.0 \n", "2023-08-13 20:00:00 9.0 \n", "2023-08-13 19:00:00 13.0 \n", "2023-08-13 18:00:00 7.0 \n", "2023-08-13 17:00:00 14.0 \n", "2023-08-13 16:00:00 16.0 \n", "2023-08-13 15:00:00 16.0 \n", "2023-08-13 14:00:00 13.0 \n", "2023-08-13 13:00:00 14.0 \n", "2023-08-13 12:00:00 7.0 \n", "2023-08-13 11:00:00 5.0 \n", "2023-08-13 10:00:00 9.0 \n", "2023-08-13 09:00:00 7.0 \n", "2023-08-13 08:00:00 3.0 \n", "2023-08-13 07:00:00 3.0 " ] }, "execution_count": 211, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.dropna() # Notar que para que se guarden los cambios debemos incluir inplace=True" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Nota:** Para comprobar si un dataframe está vacío utilizaremos el atributo ``empty``" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Para rellenar con otros valores utilizaremos el método ``fillna``. Podemos rellenar con un valor concreto, " ] }, { "cell_type": "code", "execution_count": 212, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EstadoT (°C)ST (°C)HR (%)Viento direcciónViento velocidadPresiónVisibilidadVel.Viento
Fecha_Hora
2023-08-14 00:00:00Nublado12.8No se calcula37Noroeste9 km/h1014.8 hPa10 km9.0
2023-08-13 23:00:00Nublado13.0No se calcula37Noroeste16 km/h1015.2 hPa10 km16.0
2023-08-13 22:00:00Nublado13.2No se calcula43Norte7 km/h1015.6 hPa10 km7.0
2023-08-13 21:00:00Mayormente nublado13.8No se calcula38Norte11 km/h1015 hPa10 km11.0
2023-08-13 20:00:00Mayormente nublado14.9No se calcula33Norte9 km/h1015.2 hPa10 km9.0
2023-08-13 19:00:00Mayormente nublado14.7No se calcula32Norte13 km/h1015.6 hPa10 km13.0
2023-08-13 18:00:00Parcialmente nublado15.6No se calcula26Norte7 km/h1015.6 hPa10 km7.0
2023-08-13 17:00:00Parcialmente nublado16.2No se calcula25Norte14 km/h1016 hPa10 km14.0
2023-08-13 16:00:00Algo nublado17.2No se calcula25Norte16 km/h1016.6 hPa10 km16.0
2023-08-13 15:00:00Algo nublado16.9No se calcula24Norte16 km/h1017.7 hPa10 km16.0
2023-08-13 14:00:00Ligeramente nublado16.3No se calcula23Norte13 km/h1019.4 hPa10 km13.0
2023-08-13 13:00:00Ligeramente nublado15.2No se calcula25Norte14 km/h1020.6 hPa10 km14.0
2023-08-13 12:00:00Ligeramente nublado14.4No se calcula27Norte7 km/h1021.7 hPa10 km7.0
2023-08-13 11:00:00Ligeramente nublado12.9No se calcula30Noroeste5 km/h1023.2 hPa10 km5.0
2023-08-13 10:00:00Ligeramente nublado10.8No se calcula34Norte9 km/h1023.3 hPa10 km9.0
2023-08-13 09:00:00Ligeramente nublado8.67.544Noroeste7 km/h1022.9 hPa10 km7.0
2023-08-13 08:00:00Ligeramente nublado5.3No se calcula59Norte3 km/h1023.2 hPa10 km3.0
2023-08-13 07:00:00Despejado4.0No se calcula70Oeste3 km/h1023.2 hPa10 km3.0
2023-08-13 06:00:00Despejado3.1No se calcula71Calma-999.01022.8 hPa10 km-999.0
2023-08-13 05:00:00Despejado3.2No se calcula71Calma-999.01022.8 hPa10 km-999.0
2023-08-13 04:00:00Despejado3.4No se calcula70Calma-999.01023.3 hPa10 km-999.0
2023-08-13 03:00:00Despejado3.7No se calcula72Calma-999.01023.7 hPa10 km-999.0
\n", "
" ], "text/plain": [ " Estado T (°C) ST (°C) HR (%) \\\n", "Fecha_Hora \n", "2023-08-14 00:00:00 Nublado 12.8 No se calcula 37 \n", "2023-08-13 23:00:00 Nublado 13.0 No se calcula 37 \n", "2023-08-13 22:00:00 Nublado 13.2 No se calcula 43 \n", "2023-08-13 21:00:00 Mayormente nublado 13.8 No se calcula 38 \n", "2023-08-13 20:00:00 Mayormente nublado 14.9 No se calcula 33 \n", "2023-08-13 19:00:00 Mayormente nublado 14.7 No se calcula 32 \n", "2023-08-13 18:00:00 Parcialmente nublado 15.6 No se calcula 26 \n", "2023-08-13 17:00:00 Parcialmente nublado 16.2 No se calcula 25 \n", "2023-08-13 16:00:00 Algo nublado 17.2 No se calcula 25 \n", "2023-08-13 15:00:00 Algo nublado 16.9 No se calcula 24 \n", "2023-08-13 14:00:00 Ligeramente nublado 16.3 No se calcula 23 \n", "2023-08-13 13:00:00 Ligeramente nublado 15.2 No se calcula 25 \n", "2023-08-13 12:00:00 Ligeramente nublado 14.4 No se calcula 27 \n", "2023-08-13 11:00:00 Ligeramente nublado 12.9 No se calcula 30 \n", "2023-08-13 10:00:00 Ligeramente nublado 10.8 No se calcula 34 \n", "2023-08-13 09:00:00 Ligeramente nublado 8.6 7.5 44 \n", "2023-08-13 08:00:00 Ligeramente nublado 5.3 No se calcula 59 \n", "2023-08-13 07:00:00 Despejado 4.0 No se calcula 70 \n", "2023-08-13 06:00:00 Despejado 3.1 No se calcula 71 \n", "2023-08-13 05:00:00 Despejado 3.2 No se calcula 71 \n", "2023-08-13 04:00:00 Despejado 3.4 No se calcula 70 \n", "2023-08-13 03:00:00 Despejado 3.7 No se calcula 72 \n", "\n", " Viento dirección Viento velocidad Presión Visibilidad \\\n", "Fecha_Hora \n", "2023-08-14 00:00:00 Noroeste 9 km/h 1014.8 hPa 10 km \n", "2023-08-13 23:00:00 Noroeste 16 km/h 1015.2 hPa 10 km \n", "2023-08-13 22:00:00 Norte 7 km/h 1015.6 hPa 10 km \n", "2023-08-13 21:00:00 Norte 11 km/h 1015 hPa 10 km \n", "2023-08-13 20:00:00 Norte 9 km/h 1015.2 hPa 10 km \n", "2023-08-13 19:00:00 Norte 13 km/h 1015.6 hPa 10 km \n", "2023-08-13 18:00:00 Norte 7 km/h 1015.6 hPa 10 km \n", "2023-08-13 17:00:00 Norte 14 km/h 1016 hPa 10 km \n", "2023-08-13 16:00:00 Norte 16 km/h 1016.6 hPa 10 km \n", "2023-08-13 15:00:00 Norte 16 km/h 1017.7 hPa 10 km \n", "2023-08-13 14:00:00 Norte 13 km/h 1019.4 hPa 10 km \n", "2023-08-13 13:00:00 Norte 14 km/h 1020.6 hPa 10 km \n", "2023-08-13 12:00:00 Norte 7 km/h 1021.7 hPa 10 km \n", "2023-08-13 11:00:00 Noroeste 5 km/h 1023.2 hPa 10 km \n", "2023-08-13 10:00:00 Norte 9 km/h 1023.3 hPa 10 km \n", "2023-08-13 09:00:00 Noroeste 7 km/h 1022.9 hPa 10 km \n", "2023-08-13 08:00:00 Norte 3 km/h 1023.2 hPa 10 km \n", "2023-08-13 07:00:00 Oeste 3 km/h 1023.2 hPa 10 km \n", "2023-08-13 06:00:00 Calma -999.0 1022.8 hPa 10 km \n", "2023-08-13 05:00:00 Calma -999.0 1022.8 hPa 10 km \n", "2023-08-13 04:00:00 Calma -999.0 1023.3 hPa 10 km \n", "2023-08-13 03:00:00 Calma -999.0 1023.7 hPa 10 km \n", "\n", " Vel.Viento \n", "Fecha_Hora \n", "2023-08-14 00:00:00 9.0 \n", "2023-08-13 23:00:00 16.0 \n", "2023-08-13 22:00:00 7.0 \n", "2023-08-13 21:00:00 11.0 \n", "2023-08-13 20:00:00 9.0 \n", "2023-08-13 19:00:00 13.0 \n", "2023-08-13 18:00:00 7.0 \n", "2023-08-13 17:00:00 14.0 \n", "2023-08-13 16:00:00 16.0 \n", "2023-08-13 15:00:00 16.0 \n", "2023-08-13 14:00:00 13.0 \n", "2023-08-13 13:00:00 14.0 \n", "2023-08-13 12:00:00 7.0 \n", "2023-08-13 11:00:00 5.0 \n", "2023-08-13 10:00:00 9.0 \n", "2023-08-13 09:00:00 7.0 \n", "2023-08-13 08:00:00 3.0 \n", "2023-08-13 07:00:00 3.0 \n", "2023-08-13 06:00:00 -999.0 \n", "2023-08-13 05:00:00 -999.0 \n", "2023-08-13 04:00:00 -999.0 \n", "2023-08-13 03:00:00 -999.0 " ] }, "execution_count": 212, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.fillna(-999.0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "o utilizar un método; por ejemplo rellenando con el próximo valor no nulo:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "df.fillna(method='bfill')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "También se puede interpolar entre los valores no nulos más cercanos, utilizando el método ``interpolate``." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ejercicio:** El reindexado es un método que suele producir muchos valores nulos, que después habrá que rellenar de forma adecuada. Puedes practicar los métodos anteriores en el dataframe *dfmissing*, que obtenemos con este código que previamente ha leído datos de Buenos Aires cada 3 horas, y ha rellenado las horas faltantes con nulos:" ] }, { "cell_type": "code", "execution_count": 252, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
T (°C)HR (%)
2023-08-13 03:00:003.772.0
2023-08-13 04:00:00NaNNaN
2023-08-13 05:00:00NaNNaN
2023-08-13 06:00:003.171.0
2023-08-13 07:00:00NaNNaN
2023-08-13 08:00:00NaNNaN
2023-08-13 09:00:008.644.0
2023-08-13 10:00:00NaNNaN
2023-08-13 11:00:00NaNNaN
2023-08-13 12:00:0014.427.0
2023-08-13 13:00:00NaNNaN
2023-08-13 14:00:00NaNNaN
2023-08-13 15:00:0016.924.0
2023-08-13 16:00:00NaNNaN
2023-08-13 17:00:00NaNNaN
2023-08-13 18:00:0015.626.0
2023-08-13 19:00:00NaNNaN
2023-08-13 20:00:00NaNNaN
2023-08-13 21:00:0013.838.0
2023-08-13 22:00:00NaNNaN
2023-08-13 23:00:00NaNNaN
2023-08-14 00:00:0012.837.0
\n", "
" ], "text/plain": [ " T (°C) HR (%)\n", "2023-08-13 03:00:00 3.7 72.0\n", "2023-08-13 04:00:00 NaN NaN\n", "2023-08-13 05:00:00 NaN NaN\n", "2023-08-13 06:00:00 3.1 71.0\n", "2023-08-13 07:00:00 NaN NaN\n", "2023-08-13 08:00:00 NaN NaN\n", "2023-08-13 09:00:00 8.6 44.0\n", "2023-08-13 10:00:00 NaN NaN\n", "2023-08-13 11:00:00 NaN NaN\n", "2023-08-13 12:00:00 14.4 27.0\n", "2023-08-13 13:00:00 NaN NaN\n", "2023-08-13 14:00:00 NaN NaN\n", "2023-08-13 15:00:00 16.9 24.0\n", "2023-08-13 16:00:00 NaN NaN\n", "2023-08-13 17:00:00 NaN NaN\n", "2023-08-13 18:00:00 15.6 26.0\n", "2023-08-13 19:00:00 NaN NaN\n", "2023-08-13 20:00:00 NaN NaN\n", "2023-08-13 21:00:00 13.8 38.0\n", "2023-08-13 22:00:00 NaN NaN\n", "2023-08-13 23:00:00 NaN NaN\n", "2023-08-14 00:00:00 12.8 37.0" ] }, "execution_count": 252, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.read_csv(\"buenos_aires_20230813_3h.txt\", parse_dates=[[0,1]], sep=\",\",\n", " index_col=0, encoding = \"ISO-8859-1\")[['T (°C)', 'HR (%)']].sort_index()\n", "\n", "dfmissing = df.reindex(index=pd.date_range(\"20230813 03:00\", \"20230814 00:00\", freq=\"H\"))\n", "dfmissing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Merge, concat, append" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pandas permite combinar varios dataframes (o series), de dos formas básicas: \n", "- Concatenar dos (o más) dataframes con las mismas columnas simplemente \"pegándolos\", para lo que usaremos la función *concat*. Otra función relacionada es *append*.\n", "- Unir dos dataframes por medio de un campo común, de forma que el nuevo dataframe tendrá las columnas de ambos. Esta operación se realiza por medio de la función *merge*." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Si tenemos estos dataframes, con datos del CENAOS:" ] }, { "cell_type": "code", "execution_count": 277, "metadata": {}, "outputs": [], "source": [ "# Observaciones en dos horas distintas:\n", "dfobs1 = pd.DataFrame({'Estacion':['Los Platos', 'Atima', 'Bomberos-Tegucigalpa'], \n", " 'Date': [datetime(2023,8,27,12), datetime(2023,8,27,12), datetime(2023,8,27,12)],\n", " 'PCP 1h':[0.0, 0.0, 0.0], \n", " 'PCP 6h':[7.6, 0.1, 0.0],\n", " 'PCP 12h':[11.7, 0.1, 7.3],\n", " 'PCP 24h':[11.7, 19.2, 18.8]})\n", "\n", "dfobs2 = pd.DataFrame({'Estacion':['Los Platos', 'Atima', 'Bomberos-Tegucigalpa'], \n", " 'Date': [datetime(2023,8,28,2), datetime(2023,8,28,2), datetime(2023,8,28,2)],\n", " 'PCP 1h':[1.5, 0.0, 0.0], \n", " 'PCP 6h':[1.5, 0.4, 0.0],\n", " 'PCP 12h':[1.5, 8.3, 64.0],\n", " 'PCP 24h':[13.2, 8.4, 71.3]})" ] }, { "cell_type": "code", "execution_count": 286, "metadata": {}, "outputs": [], "source": [ "# Predicciones (hipotéticas) en una hora determinada:\n", "dfpred = pd.DataFrame({'Estacion':['Los Platos', 'Atima', 'Bomberos-Tegucigalpa'], \n", " 'Date': [datetime(2023,8,27,12), datetime(2023,8,27,12), datetime(2023,8,27,12)],\n", " 'PCPpred 1h':[0.0, 0.0, 0.0], \n", " 'PCPpred 6h':[5.0, 0.0, 0.0],\n", " 'PCPpred 12h':[10.0, 0.0, 5.0],\n", " 'PCPpred 24h':[15.0, 19.2, 25.0]})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Los podemos concatenar de esta forma:" ] }, { "cell_type": "code", "execution_count": 285, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EstacionDatePCP 1hPCP 6hPCP 12hPCP 24h
0Los Platos2023-08-27 12:00:000.07.611.711.7
1Atima2023-08-27 12:00:000.00.10.119.2
2Bomberos-Tegucigalpa2023-08-27 12:00:000.00.07.318.8
0Los Platos2023-08-28 02:00:001.51.51.513.2
1Atima2023-08-28 02:00:000.00.48.38.4
2Bomberos-Tegucigalpa2023-08-28 02:00:000.00.064.071.3
\n", "
" ], "text/plain": [ " Estacion Date PCP 1h PCP 6h PCP 12h PCP 24h\n", "0 Los Platos 2023-08-27 12:00:00 0.0 7.6 11.7 11.7\n", "1 Atima 2023-08-27 12:00:00 0.0 0.1 0.1 19.2\n", "2 Bomberos-Tegucigalpa 2023-08-27 12:00:00 0.0 0.0 7.3 18.8\n", "0 Los Platos 2023-08-28 02:00:00 1.5 1.5 1.5 13.2\n", "1 Atima 2023-08-28 02:00:00 0.0 0.4 8.3 8.4\n", "2 Bomberos-Tegucigalpa 2023-08-28 02:00:00 0.0 0.0 64.0 71.3" ] }, "execution_count": 285, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfobs = pd.concat([dfobs1, dfobs2])\n", "dfobs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "También se pueden concatenar según el otro eje (en este caso no tiene mucho sentido):" ] }, { "cell_type": "code", "execution_count": 262, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EstacionDatePCP 1hPCP 6hPCP 12hPCP 24hEstacionDatePCP 1hPCP 6hPCP 12hPCP 24h
0Los Platos2023-08-27 12:00:000.07.611.711.7Los Platos2023-08-28 02:00:001.51.51.513.2
1Atima2023-08-27 12:00:000.00.10.119.2Atima2023-08-28 02:00:000.00.48.38.4
2Bomberos-Tegucigalpa2023-08-27 12:00:000.00.07.318.8Bomberos-Tegucigalpa2023-08-28 02:00:000.00.064.071.3
\n", "
" ], "text/plain": [ " Estacion Date PCP 1h PCP 6h PCP 12h PCP 24h \\\n", "0 Los Platos 2023-08-27 12:00:00 0.0 7.6 11.7 11.7 \n", "1 Atima 2023-08-27 12:00:00 0.0 0.1 0.1 19.2 \n", "2 Bomberos-Tegucigalpa 2023-08-27 12:00:00 0.0 0.0 7.3 18.8 \n", "\n", " Estacion Date PCP 1h PCP 6h PCP 12h PCP 24h \n", "0 Los Platos 2023-08-28 02:00:00 1.5 1.5 1.5 13.2 \n", "1 Atima 2023-08-28 02:00:00 0.0 0.4 8.3 8.4 \n", "2 Bomberos-Tegucigalpa 2023-08-28 02:00:00 0.0 0.0 64.0 71.3 " ] }, "execution_count": 262, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.concat([dfobs1, dfobs2], axis=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "La segunda forma consiste en unir los dos dataframes por medio de un campo común, de forma similar a como se hace en el lenguaje SQL, utilizado habitualmente en bases de datos relacionales. Indicaremos los dos dataframes a unir, y el campo (o campos) respectivo que usaremos como nexo de unión:" ] }, { "cell_type": "code", "execution_count": 270, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EstacionDatePCP 1hPCP 6hPCP 12hPCP 24hPCPpred 1hPCPpred 6hPCPpred 12hPCPpred 24h
0Los Platos2023-08-27 12:00:000.07.611.711.70.05.010.015.0
1Atima2023-08-27 12:00:000.00.10.119.20.00.00.019.2
2Bomberos-Tegucigalpa2023-08-27 12:00:000.00.07.318.80.00.05.025.0
\n", "
" ], "text/plain": [ " Estacion Date PCP 1h PCP 6h PCP 12h PCP 24h \\\n", "0 Los Platos 2023-08-27 12:00:00 0.0 7.6 11.7 11.7 \n", "1 Atima 2023-08-27 12:00:00 0.0 0.1 0.1 19.2 \n", "2 Bomberos-Tegucigalpa 2023-08-27 12:00:00 0.0 0.0 7.3 18.8 \n", "\n", " PCPpred 1h PCPpred 6h PCPpred 12h PCPpred 24h \n", "0 0.0 5.0 10.0 15.0 \n", "1 0.0 0.0 0.0 19.2 \n", "2 0.0 0.0 5.0 25.0 " ] }, "execution_count": 270, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.merge(dfobs, dfpred, left_on=['Estacion', 'Date'], right_on=['Estacion', 'Date'])\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "o, más sencillo en este caso:" ] }, { "cell_type": "code", "execution_count": 272, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EstacionDatePCP 1hPCP 6hPCP 12hPCP 24hPCPpred 1hPCPpred 6hPCPpred 12hPCPpred 24h
0Los Platos2023-08-27 12:00:000.07.611.711.70.05.010.015.0
1Atima2023-08-27 12:00:000.00.10.119.20.00.00.019.2
2Bomberos-Tegucigalpa2023-08-27 12:00:000.00.07.318.80.00.05.025.0
\n", "
" ], "text/plain": [ " Estacion Date PCP 1h PCP 6h PCP 12h PCP 24h \\\n", "0 Los Platos 2023-08-27 12:00:00 0.0 7.6 11.7 11.7 \n", "1 Atima 2023-08-27 12:00:00 0.0 0.1 0.1 19.2 \n", "2 Bomberos-Tegucigalpa 2023-08-27 12:00:00 0.0 0.0 7.3 18.8 \n", "\n", " PCPpred 1h PCPpred 6h PCPpred 12h PCPpred 24h \n", "0 0.0 5.0 10.0 15.0 \n", "1 0.0 0.0 0.0 19.2 \n", "2 0.0 0.0 5.0 25.0 " ] }, "execution_count": 272, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.merge(dfobs, dfpred, on=['Estacion', 'Date'])\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ahora podríamos calcular por ejemplo el error de la predicción fácilmente:" ] }, { "cell_type": "code", "execution_count": 273, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EstacionDatePCP 1hPCP 6hPCP 12hPCP 24hPCPpred 1hPCPpred 6hPCPpred 12hPCPpred 24hPCPerror 24h
0Los Platos2023-08-27 12:00:000.07.611.711.70.05.010.015.03.3
1Atima2023-08-27 12:00:000.00.10.119.20.00.00.019.20.0
2Bomberos-Tegucigalpa2023-08-27 12:00:000.00.07.318.80.00.05.025.06.2
\n", "
" ], "text/plain": [ " Estacion Date PCP 1h PCP 6h PCP 12h PCP 24h \\\n", "0 Los Platos 2023-08-27 12:00:00 0.0 7.6 11.7 11.7 \n", "1 Atima 2023-08-27 12:00:00 0.0 0.1 0.1 19.2 \n", "2 Bomberos-Tegucigalpa 2023-08-27 12:00:00 0.0 0.0 7.3 18.8 \n", "\n", " PCPpred 1h PCPpred 6h PCPpred 12h PCPpred 24h PCPerror 24h \n", "0 0.0 5.0 10.0 15.0 3.3 \n", "1 0.0 0.0 0.0 19.2 0.0 \n", "2 0.0 0.0 5.0 25.0 6.2 " ] }, "execution_count": 273, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[\"PCPerror 24h\"] = abs(df[\"PCPpred 24h\"] - df[\"PCP 24h\"])\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "También se pueden usar índices para realizar la unión. Este es un método más rápido si los dataframes son grandes (notar que esto ocurre también en bases de datos):" ] }, { "cell_type": "code", "execution_count": 288, "metadata": {}, "outputs": [], "source": [ "dfobs = dfobs.set_index(['Estacion', 'Date'])\n", "dfpred = dfpred.set_index(['Estacion', 'Date'])" ] }, { "cell_type": "code", "execution_count": 281, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PCP 1hPCP 6hPCP 12hPCP 24hPCPpred 1hPCPpred 6hPCPpred 12hPCPpred 24h
EstacionDate
Los Platos2023-08-27 12:00:000.07.611.711.70.05.010.015.0
Atima2023-08-27 12:00:000.00.10.119.20.00.00.019.2
Bomberos-Tegucigalpa2023-08-27 12:00:000.00.07.318.80.00.05.025.0
\n", "
" ], "text/plain": [ " PCP 1h PCP 6h PCP 12h PCP 24h \\\n", "Estacion Date \n", "Los Platos 2023-08-27 12:00:00 0.0 7.6 11.7 11.7 \n", "Atima 2023-08-27 12:00:00 0.0 0.1 0.1 19.2 \n", "Bomberos-Tegucigalpa 2023-08-27 12:00:00 0.0 0.0 7.3 18.8 \n", "\n", " PCPpred 1h PCPpred 6h PCPpred 12h \\\n", "Estacion Date \n", "Los Platos 2023-08-27 12:00:00 0.0 5.0 10.0 \n", "Atima 2023-08-27 12:00:00 0.0 0.0 0.0 \n", "Bomberos-Tegucigalpa 2023-08-27 12:00:00 0.0 0.0 5.0 \n", "\n", " PCPpred 24h \n", "Estacion Date \n", "Los Platos 2023-08-27 12:00:00 15.0 \n", "Atima 2023-08-27 12:00:00 19.2 \n", "Bomberos-Tegucigalpa 2023-08-27 12:00:00 25.0 " ] }, "execution_count": 281, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.merge(dfobs, dfpred, left_index=True, right_index=True)\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Observar que las uniones cuando se usan índices únicos serán uno-a-uno, pero al utilizar columnas pueden ser muchos-a-muchos. Si no escogemos bien la unión, podemos obtener el producto cartesiano por error: " ] }, { "cell_type": "code", "execution_count": 287, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EstacionDate_xPCP 1hPCP 6hPCP 12hPCP 24hDate_yPCPpred 1hPCPpred 6hPCPpred 12hPCPpred 24h
0Los Platos2023-08-27 12:00:000.07.611.711.72023-08-27 12:00:000.05.010.015.0
1Los Platos2023-08-28 02:00:001.51.51.513.22023-08-27 12:00:000.05.010.015.0
2Atima2023-08-27 12:00:000.00.10.119.22023-08-27 12:00:000.00.00.019.2
3Atima2023-08-28 02:00:000.00.48.38.42023-08-27 12:00:000.00.00.019.2
4Bomberos-Tegucigalpa2023-08-27 12:00:000.00.07.318.82023-08-27 12:00:000.00.05.025.0
5Bomberos-Tegucigalpa2023-08-28 02:00:000.00.064.071.32023-08-27 12:00:000.00.05.025.0
\n", "
" ], "text/plain": [ " Estacion Date_x PCP 1h PCP 6h PCP 12h PCP 24h \\\n", "0 Los Platos 2023-08-27 12:00:00 0.0 7.6 11.7 11.7 \n", "1 Los Platos 2023-08-28 02:00:00 1.5 1.5 1.5 13.2 \n", "2 Atima 2023-08-27 12:00:00 0.0 0.1 0.1 19.2 \n", "3 Atima 2023-08-28 02:00:00 0.0 0.4 8.3 8.4 \n", "4 Bomberos-Tegucigalpa 2023-08-27 12:00:00 0.0 0.0 7.3 18.8 \n", "5 Bomberos-Tegucigalpa 2023-08-28 02:00:00 0.0 0.0 64.0 71.3 \n", "\n", " Date_y PCPpred 1h PCPpred 6h PCPpred 12h PCPpred 24h \n", "0 2023-08-27 12:00:00 0.0 5.0 10.0 15.0 \n", "1 2023-08-27 12:00:00 0.0 5.0 10.0 15.0 \n", "2 2023-08-27 12:00:00 0.0 0.0 0.0 19.2 \n", "3 2023-08-27 12:00:00 0.0 0.0 0.0 19.2 \n", "4 2023-08-27 12:00:00 0.0 0.0 5.0 25.0 \n", "5 2023-08-27 12:00:00 0.0 0.0 5.0 25.0 " ] }, "execution_count": 287, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.merge(dfobs, dfpred, on='Estacion')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "En los ejemplos anteriores vemos que al realizar el cruce, tomamos la intersección de los registros, o sea, cogemos solo aquellos donde coincide la columna unión. El argumento *how* nos permite escoger la intersección (con el valor *\"inner\"*, que es el usado por defecto), la unión (valor *\"outer\"*), o tomar uno de los dataframes como dominante (para los valores *\"left\"* y *\"right\"*). Para estos casos se pone el valor nulo en aquellos registros que no existían." ] }, { "cell_type": "code", "execution_count": 289, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PCP 1hPCP 6hPCP 12hPCP 24hPCPpred 1hPCPpred 6hPCPpred 12hPCPpred 24h
EstacionDate
Los Platos2023-08-27 12:00:000.07.611.711.70.05.010.015.0
Atima2023-08-27 12:00:000.00.10.119.20.00.00.019.2
Bomberos-Tegucigalpa2023-08-27 12:00:000.00.07.318.80.00.05.025.0
\n", "
" ], "text/plain": [ " PCP 1h PCP 6h PCP 12h PCP 24h \\\n", "Estacion Date \n", "Los Platos 2023-08-27 12:00:00 0.0 7.6 11.7 11.7 \n", "Atima 2023-08-27 12:00:00 0.0 0.1 0.1 19.2 \n", "Bomberos-Tegucigalpa 2023-08-27 12:00:00 0.0 0.0 7.3 18.8 \n", "\n", " PCPpred 1h PCPpred 6h PCPpred 12h \\\n", "Estacion Date \n", "Los Platos 2023-08-27 12:00:00 0.0 5.0 10.0 \n", "Atima 2023-08-27 12:00:00 0.0 0.0 0.0 \n", "Bomberos-Tegucigalpa 2023-08-27 12:00:00 0.0 0.0 5.0 \n", "\n", " PCPpred 24h \n", "Estacion Date \n", "Los Platos 2023-08-27 12:00:00 15.0 \n", "Atima 2023-08-27 12:00:00 19.2 \n", "Bomberos-Tegucigalpa 2023-08-27 12:00:00 25.0 " ] }, "execution_count": 289, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.merge(dfobs, dfpred, left_index=True, right_index=True, how='inner')" ] }, { "cell_type": "code", "execution_count": 290, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PCP 1hPCP 6hPCP 12hPCP 24hPCPpred 1hPCPpred 6hPCPpred 12hPCPpred 24h
EstacionDate
Atima2023-08-27 12:00:000.00.10.119.20.00.00.019.2
2023-08-28 02:00:000.00.48.38.4NaNNaNNaNNaN
Bomberos-Tegucigalpa2023-08-27 12:00:000.00.07.318.80.00.05.025.0
2023-08-28 02:00:000.00.064.071.3NaNNaNNaNNaN
Los Platos2023-08-27 12:00:000.07.611.711.70.05.010.015.0
2023-08-28 02:00:001.51.51.513.2NaNNaNNaNNaN
\n", "
" ], "text/plain": [ " PCP 1h PCP 6h PCP 12h PCP 24h \\\n", "Estacion Date \n", "Atima 2023-08-27 12:00:00 0.0 0.1 0.1 19.2 \n", " 2023-08-28 02:00:00 0.0 0.4 8.3 8.4 \n", "Bomberos-Tegucigalpa 2023-08-27 12:00:00 0.0 0.0 7.3 18.8 \n", " 2023-08-28 02:00:00 0.0 0.0 64.0 71.3 \n", "Los Platos 2023-08-27 12:00:00 0.0 7.6 11.7 11.7 \n", " 2023-08-28 02:00:00 1.5 1.5 1.5 13.2 \n", "\n", " PCPpred 1h PCPpred 6h PCPpred 12h \\\n", "Estacion Date \n", "Atima 2023-08-27 12:00:00 0.0 0.0 0.0 \n", " 2023-08-28 02:00:00 NaN NaN NaN \n", "Bomberos-Tegucigalpa 2023-08-27 12:00:00 0.0 0.0 5.0 \n", " 2023-08-28 02:00:00 NaN NaN NaN \n", "Los Platos 2023-08-27 12:00:00 0.0 5.0 10.0 \n", " 2023-08-28 02:00:00 NaN NaN NaN \n", "\n", " PCPpred 24h \n", "Estacion Date \n", "Atima 2023-08-27 12:00:00 19.2 \n", " 2023-08-28 02:00:00 NaN \n", "Bomberos-Tegucigalpa 2023-08-27 12:00:00 25.0 \n", " 2023-08-28 02:00:00 NaN \n", "Los Platos 2023-08-27 12:00:00 15.0 \n", " 2023-08-28 02:00:00 NaN " ] }, "execution_count": 290, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.merge(dfobs, dfpred, left_index=True, right_index=True, how='outer')" ] }, { "cell_type": "code", "execution_count": 291, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PCP 1hPCP 6hPCP 12hPCP 24hPCPpred 1hPCPpred 6hPCPpred 12hPCPpred 24h
EstacionDate
Los Platos2023-08-27 12:00:000.07.611.711.70.05.010.015.0
Atima2023-08-27 12:00:000.00.10.119.20.00.00.019.2
Bomberos-Tegucigalpa2023-08-27 12:00:000.00.07.318.80.00.05.025.0
Los Platos2023-08-28 02:00:001.51.51.513.2NaNNaNNaNNaN
Atima2023-08-28 02:00:000.00.48.38.4NaNNaNNaNNaN
Bomberos-Tegucigalpa2023-08-28 02:00:000.00.064.071.3NaNNaNNaNNaN
\n", "
" ], "text/plain": [ " PCP 1h PCP 6h PCP 12h PCP 24h \\\n", "Estacion Date \n", "Los Platos 2023-08-27 12:00:00 0.0 7.6 11.7 11.7 \n", "Atima 2023-08-27 12:00:00 0.0 0.1 0.1 19.2 \n", "Bomberos-Tegucigalpa 2023-08-27 12:00:00 0.0 0.0 7.3 18.8 \n", "Los Platos 2023-08-28 02:00:00 1.5 1.5 1.5 13.2 \n", "Atima 2023-08-28 02:00:00 0.0 0.4 8.3 8.4 \n", "Bomberos-Tegucigalpa 2023-08-28 02:00:00 0.0 0.0 64.0 71.3 \n", "\n", " PCPpred 1h PCPpred 6h PCPpred 12h \\\n", "Estacion Date \n", "Los Platos 2023-08-27 12:00:00 0.0 5.0 10.0 \n", "Atima 2023-08-27 12:00:00 0.0 0.0 0.0 \n", "Bomberos-Tegucigalpa 2023-08-27 12:00:00 0.0 0.0 5.0 \n", "Los Platos 2023-08-28 02:00:00 NaN NaN NaN \n", "Atima 2023-08-28 02:00:00 NaN NaN NaN \n", "Bomberos-Tegucigalpa 2023-08-28 02:00:00 NaN NaN NaN \n", "\n", " PCPpred 24h \n", "Estacion Date \n", "Los Platos 2023-08-27 12:00:00 15.0 \n", "Atima 2023-08-27 12:00:00 19.2 \n", "Bomberos-Tegucigalpa 2023-08-27 12:00:00 25.0 \n", "Los Platos 2023-08-28 02:00:00 NaN \n", "Atima 2023-08-28 02:00:00 NaN \n", "Bomberos-Tegucigalpa 2023-08-28 02:00:00 NaN " ] }, "execution_count": 291, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.merge(dfobs, dfpred, left_index=True, right_index=True, how='left')" ] }, { "cell_type": "code", "execution_count": 292, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PCP 1hPCP 6hPCP 12hPCP 24hPCPpred 1hPCPpred 6hPCPpred 12hPCPpred 24h
EstacionDate
Los Platos2023-08-27 12:00:000.07.611.711.70.05.010.015.0
Atima2023-08-27 12:00:000.00.10.119.20.00.00.019.2
Bomberos-Tegucigalpa2023-08-27 12:00:000.00.07.318.80.00.05.025.0
\n", "
" ], "text/plain": [ " PCP 1h PCP 6h PCP 12h PCP 24h \\\n", "Estacion Date \n", "Los Platos 2023-08-27 12:00:00 0.0 7.6 11.7 11.7 \n", "Atima 2023-08-27 12:00:00 0.0 0.1 0.1 19.2 \n", "Bomberos-Tegucigalpa 2023-08-27 12:00:00 0.0 0.0 7.3 18.8 \n", "\n", " PCPpred 1h PCPpred 6h PCPpred 12h \\\n", "Estacion Date \n", "Los Platos 2023-08-27 12:00:00 0.0 5.0 10.0 \n", "Atima 2023-08-27 12:00:00 0.0 0.0 0.0 \n", "Bomberos-Tegucigalpa 2023-08-27 12:00:00 0.0 0.0 5.0 \n", "\n", " PCPpred 24h \n", "Estacion Date \n", "Los Platos 2023-08-27 12:00:00 15.0 \n", "Atima 2023-08-27 12:00:00 19.2 \n", "Bomberos-Tegucigalpa 2023-08-27 12:00:00 25.0 " ] }, "execution_count": 292, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.merge(dfobs, dfpred, left_index=True, right_index=True, how='right')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Agrupar" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Agrupar datos es un proceso con tres partes diferenciadas: \n", "\n", "- División de los datos en grupos según un cierto criterio \n", "- Aplicación de una función a cada uno de los grupos de forma independiente\n", "- Combinación de los grupos para formar una nueva estructura de datos " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Esta operación proviene también del lenguaje SQL, donde se utiliza la expresión \"group by\" para hacer lo mismo." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Partimos de nuestro dataframe de ejemplo con 6 observaciones (2 observaciones para 3 estaciones):" ] }, { "cell_type": "code", "execution_count": 293, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PCP 1hPCP 6hPCP 12hPCP 24h
EstacionDate
Los Platos2023-08-27 12:00:000.07.611.711.7
Atima2023-08-27 12:00:000.00.10.119.2
Bomberos-Tegucigalpa2023-08-27 12:00:000.00.07.318.8
Los Platos2023-08-28 02:00:001.51.51.513.2
Atima2023-08-28 02:00:000.00.48.38.4
Bomberos-Tegucigalpa2023-08-28 02:00:000.00.064.071.3
\n", "
" ], "text/plain": [ " PCP 1h PCP 6h PCP 12h PCP 24h\n", "Estacion Date \n", "Los Platos 2023-08-27 12:00:00 0.0 7.6 11.7 11.7\n", "Atima 2023-08-27 12:00:00 0.0 0.1 0.1 19.2\n", "Bomberos-Tegucigalpa 2023-08-27 12:00:00 0.0 0.0 7.3 18.8\n", "Los Platos 2023-08-28 02:00:00 1.5 1.5 1.5 13.2\n", "Atima 2023-08-28 02:00:00 0.0 0.4 8.3 8.4\n", "Bomberos-Tegucigalpa 2023-08-28 02:00:00 0.0 0.0 64.0 71.3" ] }, "execution_count": 293, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfobs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Para realizar el primer paso, la división en grupos, usaremos el método ``groupby``. Se pueden utilizar muchos criterios o claves (*keys*) para dividir." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "La clave más habitual es una columna (o varias) del dataframe:" ] }, { "cell_type": "code", "execution_count": 294, "metadata": {}, "outputs": [], "source": [ "grouped_st = dfobs.groupby('Estacion')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Nota:** En realidad esto es \"azúcar sintáctico\", creado para facilitarnos la escritura de código. Los grupos no se crean hasta que no son utilizados." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Es posible iterar el objeto *groupby* para ver qué contiene cada grupo:" ] }, { "cell_type": "code", "execution_count": 309, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "*** Grupo Atima ***\n", " PCP 1h PCP 6h PCP 12h PCP 24h\n", "Estacion Date \n", "Atima 2023-08-27 12:00:00 0.0 0.1 0.1 19.2\n", " 2023-08-28 02:00:00 0.0 0.4 8.3 8.4\n", "*** Grupo Bomberos-Tegucigalpa ***\n", " PCP 1h PCP 6h PCP 12h PCP 24h\n", "Estacion Date \n", "Bomberos-Tegucigalpa 2023-08-27 12:00:00 0.0 0.0 7.3 18.8\n", " 2023-08-28 02:00:00 0.0 0.0 64.0 71.3\n", "*** Grupo Los Platos ***\n", " PCP 1h PCP 6h PCP 12h PCP 24h\n", "Estacion Date \n", "Los Platos 2023-08-27 12:00:00 0.0 7.6 11.7 11.7\n", " 2023-08-28 02:00:00 1.5 1.5 1.5 13.2\n" ] } ], "source": [ "for name, group in grouped_st:\n", " print(\"*** Grupo %s ***\"%str(name))\n", " print(group)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "También podemos dividir según el índice:" ] }, { "cell_type": "code", "execution_count": 295, "metadata": {}, "outputs": [], "source": [ "grouped_dt = dfobs.groupby(dfobs.index)" ] }, { "cell_type": "code", "execution_count": 310, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "*** Grupo ('Atima', Timestamp('2023-08-27 12:00:00')) ***\n", " PCP 1h PCP 6h PCP 12h PCP 24h\n", "Estacion Date \n", "Atima 2023-08-27 12:00:00 0.0 0.1 0.1 19.2\n", "*** Grupo ('Atima', Timestamp('2023-08-28 02:00:00')) ***\n", " PCP 1h PCP 6h PCP 12h PCP 24h\n", "Estacion Date \n", "Atima 2023-08-28 02:00:00 0.0 0.4 8.3 8.4\n", "*** Grupo ('Bomberos-Tegucigalpa', Timestamp('2023-08-27 12:00:00')) ***\n", " PCP 1h PCP 6h PCP 12h PCP 24h\n", "Estacion Date \n", "Bomberos-Tegucigalpa 2023-08-27 12:00:00 0.0 0.0 7.3 18.8\n", "*** Grupo ('Bomberos-Tegucigalpa', Timestamp('2023-08-28 02:00:00')) ***\n", " PCP 1h PCP 6h PCP 12h PCP 24h\n", "Estacion Date \n", "Bomberos-Tegucigalpa 2023-08-28 02:00:00 0.0 0.0 64.0 71.3\n", "*** Grupo ('Los Platos', Timestamp('2023-08-27 12:00:00')) ***\n", " PCP 1h PCP 6h PCP 12h PCP 24h\n", "Estacion Date \n", "Los Platos 2023-08-27 12:00:00 0.0 7.6 11.7 11.7\n", "*** Grupo ('Los Platos', Timestamp('2023-08-28 02:00:00')) ***\n", " PCP 1h PCP 6h PCP 12h PCP 24h\n", "Estacion Date \n", "Los Platos 2023-08-28 02:00:00 1.5 1.5 1.5 13.2\n" ] } ], "source": [ "for name, group in grouped_dt:\n", " print(\"*** Grupo %s ***\"%str(name))\n", " print(group)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "O incluso aplicando una función:" ] }, { "cell_type": "code", "execution_count": 302, "metadata": {}, "outputs": [], "source": [ "def PCP_higher_than_10(df):\n", " return df['PCP 12h']>10\n", "\n", "grouped_pcp10 = dfobs.groupby(PCP_higher_than_10(dfobs))" ] }, { "cell_type": "code", "execution_count": 303, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "*** Grupo False ***\n", " PCP 1h PCP 6h PCP 12h PCP 24h\n", "Estacion Date \n", "Atima 2023-08-27 12:00:00 0.0 0.1 0.1 19.2\n", "Bomberos-Tegucigalpa 2023-08-27 12:00:00 0.0 0.0 7.3 18.8\n", "Los Platos 2023-08-28 02:00:00 1.5 1.5 1.5 13.2\n", "Atima 2023-08-28 02:00:00 0.0 0.4 8.3 8.4\n", "*** Grupo True ***\n", " PCP 1h PCP 6h PCP 12h PCP 24h\n", "Estacion Date \n", "Los Platos 2023-08-27 12:00:00 0.0 7.6 11.7 11.7\n", "Bomberos-Tegucigalpa 2023-08-28 02:00:00 0.0 0.0 64.0 71.3\n" ] } ], "source": [ "for name, group in grouped_pcp10:\n", " print(\"*** Grupo %s ***\"%str(name))\n", " print(group)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Además de las filas, también se pueden dividir las columnas, utilizando el argumento *axis*. Se puede encontrar una lista detallada de las claves posibles en https://pandas.pydata.org/pandas-docs/stable/groupby.html" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "El atributo *groups* es un diccionario cuyas claves son los nombres de los grupos, y los valores las etiquetas del eje correspondiente a cada grupo:" ] }, { "cell_type": "code", "execution_count": 311, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'Atima': [('Atima', 2023-08-27 12:00:00), ('Atima', 2023-08-28 02:00:00)], 'Bomberos-Tegucigalpa': [('Bomberos-Tegucigalpa', 2023-08-27 12:00:00), ('Bomberos-Tegucigalpa', 2023-08-28 02:00:00)], 'Los Platos': [('Los Platos', 2023-08-27 12:00:00), ('Los Platos', 2023-08-28 02:00:00)]}" ] }, "execution_count": 311, "metadata": {}, "output_type": "execute_result" } ], "source": [ "grouped_st.groups" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Se selecciona un grupo determinado con el método ``get_group``:" ] }, { "cell_type": "code", "execution_count": 313, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PCP 1hPCP 6hPCP 12hPCP 24h
EstacionDate
Atima2023-08-27 12:00:000.00.10.119.2
2023-08-28 02:00:000.00.48.38.4
\n", "
" ], "text/plain": [ " PCP 1h PCP 6h PCP 12h PCP 24h\n", "Estacion Date \n", "Atima 2023-08-27 12:00:00 0.0 0.1 0.1 19.2\n", " 2023-08-28 02:00:00 0.0 0.4 8.3 8.4" ] }, "execution_count": 313, "metadata": {}, "output_type": "execute_result" } ], "source": [ "grouped_st.get_group('Atima')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Después de agrupar, podemos aplicar una función a cada grupo, aplicándola directamente al objeto *groupby*:" ] }, { "cell_type": "code", "execution_count": 317, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PCP 1hPCP 6hPCP 12hPCP 24h
Estacion
Atima0.00.58.427.6
Bomberos-Tegucigalpa0.00.071.390.1
Los Platos1.59.113.224.9
\n", "
" ], "text/plain": [ " PCP 1h PCP 6h PCP 12h PCP 24h\n", "Estacion \n", "Atima 0.0 0.5 8.4 27.6\n", "Bomberos-Tegucigalpa 0.0 0.0 71.3 90.1\n", "Los Platos 1.5 9.1 13.2 24.9" ] }, "execution_count": 317, "metadata": {}, "output_type": "execute_result" } ], "source": [ "grouped_st.sum()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Podemos elegir una columna únicamente:" ] }, { "cell_type": "code", "execution_count": 318, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Estacion\n", "Atima 13.80\n", "Bomberos-Tegucigalpa 45.05\n", "Los Platos 12.45\n", "Name: PCP 24h, dtype: float64" ] }, "execution_count": 318, "metadata": {}, "output_type": "execute_result" } ], "source": [ "grouped_st['PCP 24h'].mean()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Y también aplicar diferentes funciones a distintas columnas, por medio del método ``agg`` (o ``aggregate``):" ] }, { "cell_type": "code", "execution_count": 322, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PCP 12hPCP 24h
Estacion
Atima4.207.636753
Bomberos-Tegucigalpa35.6537.123106
Los Platos6.601.060660
\n", "
" ], "text/plain": [ " PCP 12h PCP 24h\n", "Estacion \n", "Atima 4.20 7.636753\n", "Bomberos-Tegucigalpa 35.65 37.123106\n", "Los Platos 6.60 1.060660" ] }, "execution_count": 322, "metadata": {}, "output_type": "execute_result" } ], "source": [ "grouped_st.agg({'PCP 12h': np.mean, 'PCP 24h': np.std})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "o si renombramos para que quede más bonito:" ] }, { "cell_type": "code", "execution_count": 323, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
mean_PCP 12hstd_PCP 24h
Estacion
Atima4.207.636753
Bomberos-Tegucigalpa35.6537.123106
Los Platos6.601.060660
\n", "
" ], "text/plain": [ " mean_PCP 12h std_PCP 24h\n", "Estacion \n", "Atima 4.20 7.636753\n", "Bomberos-Tegucigalpa 35.65 37.123106\n", "Los Platos 6.60 1.060660" ] }, "execution_count": 323, "metadata": {}, "output_type": "execute_result" } ], "source": [ "grouped_st.agg({'PCP 12h': np.mean, 'PCP 24h': np.std}).rename(\n", " columns={'PCP 12h':'mean_PCP 12h', 'PCP 24h': 'std_PCP 24h'})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Ejercicio:** \n", "Para este ejercicio utilizaremos datos de un fichero csv de la estación de Atlacomulco, extraído de la web del Servicio Meteorológico Nacional de México. Realice las siguientes operaciones:\n", "\n", "1. Cargue el fichero en un dataframe de Pandas, convirtiendo las fechas a Timestamps, y tomando la fecha local como índice (pista: tendrá que saltarse las primeras líneas de metadatos con la opción *skiprows*).\n", "2. Seleccione los registros con una temperatura mayor de 20 °C y humedad relativa menor de 40%\n", "3. Seleccione los registros que corresponden a las 12 horas hora local únicamente (para cada día).\n", "4. Calcule la media y desviación estandar de la radiación solar\n", "5. Cree dos dataframes nuevos, el primero incluyendo solo los datos correspondientes al día 25 de agosto y el segundo los datos del día 27 de agosto.\n", "6. Una los dos dataframes en uno (con *concat*)\n", "7. Divida el dataframe en tres más pequeños, de forma que cada uno contenga información únicamente sobre la temperatura, humedad relativa y radiación solar, respectivamente.\n", "8. Vuelva a unir los tres dataframes en uno (con *merge*).\n", "9. Calcule la temperatura máxima y mínima para cada día, del 24 al 28 de agosto (pista: tendrá que agrupar con groupby)." ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Media: 237.396880\n", "Desviación estándar: 343.681928\n" ] } ], "source": [ "import pandas as pd\n", "\n", "# 1.\n", "df = pd.read_csv(\"Estacion_ATLACOMULCO_1_semana.csv\", parse_dates=[0], skiprows=9,\n", " sep=\",\", encoding = \"ISO-8859-1\", index_col=[0])\n", "# 2.\n", "df[(df[\"Temperatura del Aire (°C)\"]> 20.0) & (df[\"Humedad relativa (%)\"] < 40.0)]\n", "# 3.\n", "df[(df.index.hour==12) & (df.index.minute==0)]\n", "# 4.\n", "df[\"Radiación Solar (W/m2)\"].mean()\n", "df[\"Radiación Solar (W/m2)\"].std()\n", "# 5.\n", "df25ago = df.loc[df.index.day==25, :]\n", "df27ago = df.loc[df.index.day==27, :]\n", "# 6.\n", "df_con = pd.concat([df25ago, df27ago])\n", "# 7.\n", "df_t = df[[\"Temperatura del Aire (°C)\"]]\n", "df_hr = df[[\"Humedad relativa (%)\"]]\n", "df_rs = df[[\"Radiación Solar (W/m2)\"]]\n", "# 8. \n", "df_mer = pd.merge(df_t, df_hr, left_index=True, right_index=True)\n", "df_mer = pd.merge(df_mer, df_rs, left_index=True, right_index=True)\n", "# 9.\n", "gr_day = df.groupby(df.index.day)\n", "gr_day[\"Temperatura del Aire (°C)\"].max()\n", "gr_day[\"Temperatura del Aire (°C)\"].min()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Reshaping: stack, pivot" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Partimos de este dataframe (con su índice):" ] }, { "cell_type": "code", "execution_count": 324, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PCP 1hPCP 6hPCP 12hPCP 24h
EstacionDate
Los Platos2023-08-27 12:00:000.07.611.711.7
Atima2023-08-27 12:00:000.00.10.119.2
Bomberos-Tegucigalpa2023-08-27 12:00:000.00.07.318.8
Los Platos2023-08-28 02:00:001.51.51.513.2
Atima2023-08-28 02:00:000.00.48.38.4
Bomberos-Tegucigalpa2023-08-28 02:00:000.00.064.071.3
\n", "
" ], "text/plain": [ " PCP 1h PCP 6h PCP 12h PCP 24h\n", "Estacion Date \n", "Los Platos 2023-08-27 12:00:00 0.0 7.6 11.7 11.7\n", "Atima 2023-08-27 12:00:00 0.0 0.1 0.1 19.2\n", "Bomberos-Tegucigalpa 2023-08-27 12:00:00 0.0 0.0 7.3 18.8\n", "Los Platos 2023-08-28 02:00:00 1.5 1.5 1.5 13.2\n", "Atima 2023-08-28 02:00:00 0.0 0.4 8.3 8.4\n", "Bomberos-Tegucigalpa 2023-08-28 02:00:00 0.0 0.0 64.0 71.3" ] }, "execution_count": 324, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfobs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "El método ``stack`` \"comprime\" una de las columnas de un dataframe. El método inverso es ``unstack``." ] }, { "cell_type": "code", "execution_count": 326, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Estacion Date \n", "Los Platos 2023-08-27 12:00:00 PCP 1h 0.0\n", " PCP 6h 7.6\n", " PCP 12h 11.7\n", " PCP 24h 11.7\n", "Atima 2023-08-27 12:00:00 PCP 1h 0.0\n", " PCP 6h 0.1\n", " PCP 12h 0.1\n", " PCP 24h 19.2\n", "Bomberos-Tegucigalpa 2023-08-27 12:00:00 PCP 1h 0.0\n", " PCP 6h 0.0\n", " PCP 12h 7.3\n", " PCP 24h 18.8\n", "Los Platos 2023-08-28 02:00:00 PCP 1h 1.5\n", " PCP 6h 1.5\n", " PCP 12h 1.5\n", " PCP 24h 13.2\n", "Atima 2023-08-28 02:00:00 PCP 1h 0.0\n", " PCP 6h 0.4\n", " PCP 12h 8.3\n", " PCP 24h 8.4\n", "Bomberos-Tegucigalpa 2023-08-28 02:00:00 PCP 1h 0.0\n", " PCP 6h 0.0\n", " PCP 12h 64.0\n", " PCP 24h 71.3\n", "dtype: float64" ] }, "execution_count": 326, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dfobs.stack()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Para \"pivotar\" un dataframe usaremos la función ``pivot_table``:" ] }, { "cell_type": "code", "execution_count": 328, "metadata": {}, "outputs": [], "source": [ "dfobs = dfobs.reset_index()" ] }, { "cell_type": "code", "execution_count": 334, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EstacionAtimaBomberos-TegucigalpaLos Platos
Date
2023-08-27 12:00:000.17.311.7
2023-08-28 02:00:008.364.01.5
\n", "
" ], "text/plain": [ "Estacion Atima Bomberos-Tegucigalpa Los Platos\n", "Date \n", "2023-08-27 12:00:00 0.1 7.3 11.7\n", "2023-08-28 02:00:00 8.3 64.0 1.5" ] }, "execution_count": 334, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_pivot = pd.pivot_table(dfobs, values='PCP 12h', index='Date', columns='Estacion')\n", "df_pivot" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Se puede pivotar más de una columna:" ] }, { "cell_type": "code", "execution_count": 335, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PCP 12hPCP 1hPCP 24hPCP 6h
EstacionAtimaBomberos-TegucigalpaLos PlatosAtimaBomberos-TegucigalpaLos PlatosAtimaBomberos-TegucigalpaLos PlatosAtimaBomberos-TegucigalpaLos Platos
Date
2023-08-27 12:00:000.17.311.70.00.00.019.218.811.70.10.07.6
2023-08-28 02:00:008.364.01.50.00.01.58.471.313.20.40.01.5
\n", "
" ], "text/plain": [ " PCP 12h PCP 1h \\\n", "Estacion Atima Bomberos-Tegucigalpa Los Platos Atima \n", "Date \n", "2023-08-27 12:00:00 0.1 7.3 11.7 0.0 \n", "2023-08-28 02:00:00 8.3 64.0 1.5 0.0 \n", "\n", " PCP 24h \\\n", "Estacion Bomberos-Tegucigalpa Los Platos Atima \n", "Date \n", "2023-08-27 12:00:00 0.0 0.0 19.2 \n", "2023-08-28 02:00:00 0.0 1.5 8.4 \n", "\n", " PCP 6h \\\n", "Estacion Bomberos-Tegucigalpa Los Platos Atima \n", "Date \n", "2023-08-27 12:00:00 18.8 11.7 0.1 \n", "2023-08-28 02:00:00 71.3 13.2 0.4 \n", "\n", " \n", "Estacion Bomberos-Tegucigalpa Los Platos \n", "Date \n", "2023-08-27 12:00:00 0.0 7.6 \n", "2023-08-28 02:00:00 0.0 1.5 " ] }, "execution_count": 335, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.pivot_table(dfobs, values=['PCP 1h', 'PCP 6h', 'PCP 12h', 'PCP 24h'], \n", " index='Date', columns='Estacion')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "La función ``melt`` es la función inversa de ``pivot_table``:" ] }, { "cell_type": "code", "execution_count": 336, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateEstacionPCP 24h
02023-08-27 12:00:00Atima0.1
12023-08-28 02:00:00Atima8.3
22023-08-27 12:00:00Bomberos-Tegucigalpa7.3
32023-08-28 02:00:00Bomberos-Tegucigalpa64.0
42023-08-27 12:00:00Los Platos11.7
52023-08-28 02:00:00Los Platos1.5
\n", "
" ], "text/plain": [ " Date Estacion PCP 24h\n", "0 2023-08-27 12:00:00 Atima 0.1\n", "1 2023-08-28 02:00:00 Atima 8.3\n", "2 2023-08-27 12:00:00 Bomberos-Tegucigalpa 7.3\n", "3 2023-08-28 02:00:00 Bomberos-Tegucigalpa 64.0\n", "4 2023-08-27 12:00:00 Los Platos 11.7\n", "5 2023-08-28 02:00:00 Los Platos 1.5" ] }, "execution_count": 336, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.melt(df_pivot.reset_index(), id_vars = 'Date', value_name = 'PCP 24h')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Gráficos" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "El objeto dataframe dispone de un método ``plot`` para realizar gráficos. Este método es simplemente un wrapper de la función ``plot`` de ``matplolib.pyplot``, y se usa de forma similar:" ] }, { "cell_type": "code", "execution_count": 337, "metadata": {}, "outputs": [], "source": [ "df = pd.read_csv(\"buenos_aires_20230813.txt\", parse_dates=[['Fecha', 'Hora']], \n", " sep=\",\", encoding = \"ISO-8859-1\")" ] }, { "cell_type": "code", "execution_count": 347, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 347, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "df[\"T (°C)\"].plot()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.10.1" } }, "nbformat": 4, "nbformat_minor": 1 }