Dirección General de Servicios de Cómputo Académico
Dirección de Cómputo para la Docencia
Los ficheros [Link], [Link], [Link] y
[Link], contienen datos sobre las emisiones contaminates en la
ciudad de Madrid en los años 2016, 2017, 2018 y 2019 respectivamente. Escribir
un programa con los siguientes requisitos:
1. Generar un DataFrame con los datos de los cuatro ficheros.
2. Filtrar las columnas del DataFrame para quedarse con las columnas
ESTACION, MAGNITUD, AÑO, MES y las correspondientes a los días D01,
D02, etc.
3. Reestructurar el DataFrame para que los valores de los contaminantes de
las columnas de los días aparezcan en una única columna.
4. Añadir una columna con la fecha a partir de la concatenación del año, el
mes y el día (usar el módulo datetime).
5. Eliminar las filas con fechas no válidas (utilizar la función isnat del módulo
numpy) y ordenar el DataFrame por estaciones contaminantes y fecha.
6. Mostrar por pantalla las estaciones y los contaminantes disponibles en el
DataFrame.
7. Crear una función que reciba una estación, un contaminante y un rango de
fechas y devuelva una serie con las emisiones del contaminante dado en la
estación y rango de fechas dado.
8. Mostrar un resumen descriptivo (mínimo, máximo, media, etc.) para cada
contaminante.
9. Mostrar un resumen descriptivo para cada contaminante por distritos.
10. Crear una función que reciba una estación y un contaminante y devuelva un
resumen descriptivo de las emisiones del contaminante indicado en la
estación indicada.
11. Crear una función que devuelva las emisiones medias mensuales de un
contaminante y un año dados para todos las estaciones.
12. Crear un función que reciba una estación de medición y devuelva un
DataFrame con las medias mensuales de los distintos tipos de
contaminantes.
Ejercicios Pandas # 3 L.I. Raymundo Lumbreras López [Hoja 1 de 4]
Dirección General de Servicios de Cómputo Académico
Dirección de Cómputo para la Docencia
import pandas as pd
import numpy as np
import datetime as dt
# Generar un DataFrame con los datos de los cuatro ficheros
import pandas as pd
emisiones_2016 = pd.read_csv('[Link]', sep = ';')
emisiones_2017 = pd.read_csv('[Link]', sep = ';')
emisiones_2018 = pd.read_csv('[Link]', sep = ';')
emisiones_2019 = pd.read_csv('[Link]', sep = ';')
emisiones = [Link]([emisiones_2016, emisiones_2017, emisiones_2018,
emisiones_2019])
emisiones
Solucion
# Filtrar las columnas del DataFrame para quedarse con las columnas
ESTACION, MAGNITUD, AÑO, MES y las correspondientes a los días D01,
D02, etc.
columnas = ['ESTACION', 'MAGNITUD', 'ANO', 'MES']
[Link]([col for col in emisiones if [Link]('D')])
emisiones = emisiones[columnas]
emisiones
# Reestructurar el DataFrame para que los valores de los contaminantes
de las columnas de los días aparezcan en una única columna.
emisiones = [Link](id_vars=['ESTACION', 'MAGNITUD', 'ANO',
'MES'], var_name='DIA', value_name='VALOR')
emisiones
# Crear una nueva columna con las fechas a partir del año, mes y día
# Primero eliminamos el caracter D del comienzo de la columna de los
días
emisiones['DIA'] = [Link]('D')
# Concatenamos las columnas del año, mes y día
emisiones['FECHA'] = [Link](str) + '/' +
[Link](str) + '/' + [Link](str)
Ejercicios Pandas # 3 L.I. Raymundo Lumbreras López [Hoja 2 de 4]
Dirección General de Servicios de Cómputo Académico
Dirección de Cómputo para la Docencia
# Convertimos la nueva columna al tipo fecha
emisiones['FECHA'] = pd.to_datetime([Link],
format='%Y/%m/%d', infer_datetime_format=True, errors='coerce')
emisiones
# Eliminar las filas con fechas no válidas
emisiones = [Link](emisiones[[Link]([Link])].index)
# Ordenar el el dataframe por estación, magnitud y fecha
emisiones.sort_values(['ESTACION', 'MAGNITUD', 'FECHA'])
# Mostrar las estaciones disponibles
print('Estaciones:', [Link]())
# Mostrar los contaminantes disponibles
print('Contaminantes:', [Link]())
# Función que devuelve las emisiones de un contaminante dado en una
estación y rango de fechas dado.
def evolucion(estacion, contaminante, desde, hasta):
return emisiones[([Link] == estacion) &
([Link] == contaminante) & ([Link] >= desde) &
([Link] <= hasta)].sort_values('FECHA').VALOR
evolucion(56, 8, [Link]('2018/10/25', '%Y/%m/%d'),
[Link]('2019/02/12', '%Y/%m/%d'))
# Resumen descriptivo por contaminantes
[Link]('MAGNITUD').[Link]()
# Resumen descriptivo por contaminantes y distritos
[Link](['ESTACION', 'MAGNITUD']).[Link]()
# Función que devuelve un resumen descriptivo de la emisiones en un
contaminante dado en un estación dada
def resumen(estacion, contaminante):
return emisiones[([Link] == estacion) &
([Link] == contaminante)].[Link]()
Ejercicios Pandas # 3 L.I. Raymundo Lumbreras López [Hoja 3 de 4]
Dirección General de Servicios de Cómputo Académico
Dirección de Cómputo para la Docencia
# Resumen de Dióxido de Nitrógeno en Plaza Elíptica
print('Resumen Dióxido de Nitrógeno en Plaza Elíptica:\n', resumen(56,
8),'\n', sep='')
# Resumen de Dióxido de Nitrógeno en Plaza del Carmen
print('Resumen Dióxido de Nitrógeno en Plaza del Carmen:\n',
resumen(35, 8), sep='')
# Función que devuelve una serie con las emisiones medias mensuales de
un contaminante y un mes año para todos las estaciones
def evolucion_mensual(contaminante, año):
return emisiones[([Link] == contaminante) &
([Link] == año)].groupby(['ESTACION',
'MES']).[Link]().unstack('MES')
# Evolución del dióxido de nitrógeno en 2019
evolucion_mensual(8, 2019)
Ejercicios Pandas # 3 L.I. Raymundo Lumbreras López [Hoja 4 de 4]