<jupyter_start><jupyter_text>Introducción a Pandas* Pandas es una librería open source construida sobre NumPy.* Permite realizar análisis de datos de forma eficiente, y también sirve para limpiar y preparar los datos.* Sobresale por su rendimiento y productividad.* También permite hacer visualizaciones.* Permite trabajar con datos de una variedad amplia de fuentes.* Algunos comparan a Pandas con una versión muy potente de Ms Excel, con muchas más características.En esta Sección aprenderemos a usar Pandas para realizar análisis de datos. Estudiaremos los siguientes elementos:* Series* DataFrames* Datos faltantes* Agrupaciones y agregaciones: GroupBy* Combinaciones y concatenaciones (Merging, Joining, and Concatenating)* Operaciones* Entrada/Salida de datos InstalaciónSi aún no tiene instalado Pandas:> conda install pandaso> pip install pandas Series El primer tipo de datos que estudiaremos en Pandas es el tipo de datos de series. **Una serie es muy similar a un arreglo de NumPy** (de hecho está construida sobre el objeto array de NumPy). Lo que diferencia los arrays de NumPy de las series, es que **una serie puede tener etiquetas de eje, lo que significa que puede ser indexada por una etiqueta, en lugar de solo un índice numérico**. Tampoco necesita contener únicamente datos numéricos, puede contener cualquier Objeto de Python.<jupyter_code># Vamos a importar la librería Pandas y explorar el objeto Series.
import numpy as np
import pandas as pd<jupyter_output><empty_output><jupyter_text>Creación de SeriesEs posible convertir una lista, un arreglo de NumPy, o un diccionario, en una Serie:<jupyter_code>etiquetas = ['a','b','c']
lista = [10,20,30]
arreglo = np.array([10,20,30])
diccionario = {'a':10,'b':20,'c':30}<jupyter_output><empty_output><jupyter_text>** A partir de una Lista**<jupyter_code>pd.Series(data=lista)
pd.Series(data=lista,index=etiquetas)
pd.Series(lista,etiquetas)<jupyter_output><empty_output><jupyter_text>** A partir de arreglos de NumPy **<jupyter_code>pd.Series(arreglo)
pd.Series(arreglo,etiquetas)<jupyter_output><empty_output><jupyter_text>** A partir de un diccionario **<jupyter_code>pd.Series(diccionario)<jupyter_output><empty_output><jupyter_text>Datos almacenados en SeriesLas Series en Pandas pueden almacenar cualquier objeto de Python, no solo números:<jupyter_code># Números
pd.Series(data=arreglo)
# También pueden almacenar cadenas
pd.Series(data=etiquetas)
# Incluso una Serie puede almacenar funciones (aunque esto es poco probable que se necesite)
pd.Series([sum,print,len])<jupyter_output><empty_output><jupyter_text>Usando los índicesLos índices son la clave para entender cómo usar las Series. Pandas usa los nombres de los índices o sus números para permitir la búsqueda rápida de información (funcionan como una tabla hash o un diccionario).Para el ejemplo, vamos a crear 2 Series: ser1 y ser2<jupyter_code>ser1 = pd.Series([10,20,30,40],index = ['Colombia', 'Germany','Spain', 'Japan'])                                   
ser1
ser2 = pd.Series([1,2,5,4],index = ['Germany','Colombia','Italy', 'Japan'])                                   
ser2
ser1['Japan']
ser1[3]<jupyter_output><empty_output><jupyter_text>También, se pueden hacer operaciones entre Series:<jupyter_code>ser1 + ser2
ser1 / ser2<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.08548044862079418, 'fraction_numerical': 0.01333737496210973, 'mean_word_length': 5.962025316455696, 'pattern_counts': {'":': 0, '<': 33, '<?xml version=': 0, '>': 35, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, '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': '8', 'dir': 'jupyter-structured-clean-dedup', 'id': '320885', 'license': 'MIT', 'n_tokens_mistral': 1143, 'n_tokens_neox': 1118, 'n_words': 364, 'path': 'Pandas/0_Pandas_Intro_Series.ipynb', 'repo_name': 'vramirez/2019BWB', 'size': '3299'}