<jupyter_start><jupyter_text>Carga y manipulación de datos con pandas _ __pandas es una biblioteca de análisis de datos en Python__ que nos provee de las estructuras de datos y herramientas para realizar análisis de manera rápida. Se articula sobre la biblioteca NumPy y nos permite enfrentarnos a situaciones en las que tenemos que manejar datos reales que requieren seguir un proceso de carga, limpieza, filtrado, reduccióń y análisis. __En esta clase veremos como cargar y guardar datos, las características de las pricipales estructuras de pandas y las aplicaremos a algunos problemas._<jupyter_code># Importamos pandas<jupyter_output><empty_output><jupyter_text>Cargando los datos y explorándolos Trabajaremos sobre un fichero de datos metereológicos de la Consejeria Agricultura Pesca y Desarrollo Rural Andalucía.<jupyter_code>from IPython.display import HTML
HTML('<iframe src="http://www.juntadeandalucia.es/agriculturaypesca/ifapa/ria/servlet/FrontController?action=Static&url=coordenadas.jsp&c_provincia=4&c_estacion=4" width="700" height="400"></iframe>')
# Vemos qué pinta tiene el fichero<jupyter_output><empty_output><jupyter_text>Vemos que los datos no están en formato CSV, aunque sí tienen algo de estructura. Si intentamos cargarlos con pandas no tendremos mucho éxito:<jupyter_code># Tratamos de cargarlo en pandas<jupyter_output><empty_output><jupyter_text>Tenemos que hacer los siguientes cambios:* Separar los campos por un número arbitrario de espacios en blanco.* Saltar las primeras líneas.* Dar nombres nuevos a las columnas.* Descartar la columna del día del año (podemos calcularla luego).* Parsear las fechas en el formato correcto.<jupyter_code>#     date_parser=lambda x: pd.datetime.strptime(x, '%d-%m-%y'),  # Parseo manual
# Ordenando de más antigua a más moderna
# Mostrando sólo las primeras o las últimas líneas
# Comprobamos los tipos de datos de la columnas<jupyter_output><empty_output><jupyter_text>Las fechas también se pueden parsear de manera manual con el argumento:```date_parser=lambda x: pd.datetime.strptime(x, '%d-%m-%y'),   Parseo manual``` Para acordarnos de cómo parsear las fechas: http://strftime.org/<jupyter_code># Pedomos información general del dataset
# Descripción estadística
# Una vez convertido en un objeto fecha se pueden obtener cosas como:<jupyter_output><empty_output><jupyter_text>Accediendo a los datos  Tenemos dos formas de acceder a las columnas: por nombre o por atributo (si no contienen espacios ni caracteres especiales).<jupyter_code># Accediendo como clave
# Accediendo como atributo
# Accediendo a varias columnas a la vez
# Modificando valores de columnas
# Aplicando una función a una columna entera (ej. media numpy)
# Calculando la media con pandas<jupyter_output><empty_output><jupyter_text>Para acceder a las filas tenemos dos métodos: `.loc` (basado en etiquetas), `.iloc` (basado en posiciones enteras) y `.ix` (que combina ambos).<jupyter_code># Accediendo a una fila por índice
# Accediendo a una fila por etiqueta<jupyter_output><empty_output><jupyter_text>Puedo incluso hacer secciones basadas en fechas: También puedo indexar utilizando arrays de valores booleanos, por ejemplo procedentes de la comprobación de una condición:<jupyter_code># Búsqueda de valores nulos<jupyter_output><empty_output><jupyter_text>Podemos agrupar nuestros datos utilizando `groupby`:<jupyter_code># Agruparemos por año y día: creemos dos columnas nuevas
# Creamos la agrupación
# Podemos ver los grupos que se han creado
# Accedemos a un grupo
# O hacemos una agregación de los datos:<jupyter_output><empty_output><jupyter_text>Y podemos reorganizar los datos utilizando _pivot tables_:<jupyter_code># Dejar los años como índices y ver la media mensual en cada columna<jupyter_output><empty_output><jupyter_text>Por último, pandas proporciona métodos para calcular magnitudes como medias móviles usando el método `rolling`:<jupyter_code># Calcular la media de la columna TMAX
# Media trimensual centrada<jupyter_output><empty_output><jupyter_text>Plotting  Líneas<jupyter_code># Pintar la temperatura máx, min, med<jupyter_output><empty_output><jupyter_text>Cajas Pintando la temperatura máxima de las máximas, mínima de las mínimas, media de las medias para cada día del año de los años disponnibles  Visualizaciones especiales<jupyter_code># scatter_matrix<jupyter_output><empty_output><jupyter_text>--- ¡Síguenos en Twitter! Follow @AeroPython !function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');  Este notebook ha sido realizado por: <NAME>, y <NAME>  Curso AeroPython por <NAME> y <NAME> se distribuye bajo una Licencia Creative Commons Atribución 4.0 Internacional. ---_Las siguientes celdas contienen configuración del Notebook__Para visualizar y utlizar los enlaces a Twitter el notebook debe ejecutarse como [seguro](http://ipython.org/ipython-doc/dev/notebook/security.html)_    File > Trusted Notebook<jupyter_code># Esta celda da el estilo al notebook
from IPython.core.display import HTML
css_file = '../styles/aeropython.css'
HTML(open(css_file, "r").read())<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.08014331510465775, 'fraction_numerical': 0.002074297567414671, 'mean_word_length': 6.7317784256559765, 'pattern_counts': {'":': 0, '<': 63, '<?xml version=': 0, '>': 64, 'https://': 0, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '14', 'dir': 'jupyter-structured-clean-dedup', 'id': '563126', 'license': 'CC-BY-4.0', 'n_tokens_mistral': 1835, 'n_tokens_neox': 1824, 'n_words': 567, 'path': 'notebooks_vacios/050-Pandas-Intro.ipynb', 'repo_name': 'caorodriguez/aprendealgo-', 'size': '5348'}