Pandas en Python, con ejemplos -Parte I- Introducción
El proyecto de este post lo puedes descargar pulsando AQUI.
Sobre la librería de Pandas vamos a hablar de los siguientes temas en las entradas:
- Parte I: Introducción a Pandas.
- Parte II: DataFrame: Lectura y Escritura, Mergeo de DataFrame's y GroupBy.
- Parte III: Operaciones de "Pivot_table" con DataFrame's.
Introducción
Pandas es una librería de python destinada al análisis de datos, que proporciona unas estructuras de datos flexibles y que permiten trabajar con ellos de forma muy eficiente. Pandas ofrece las siguientes estructuras de datos:
-
Series: Son arrays unidimensionales con indexación (arrays con índice o etiquetados), similar a los diccionarios. Pueden generarse a partir de diccionarios o de listas.
-
DataFrame: Son estructuras de datos similares a las tablas de bases de datos relacionales como SQL.
- Panel, Panel4D y PanelND: Estas estructuras de datos permiten trabajar con más de dos dimensiones. Dado que es algo complejo y poco utilizado trabajar con arrays de más de dos dimensiones no trataremos los paneles en estos tutoriales de introdución a Pandas.
Para ver los ejemplos que vamos a mostrar en este tutorial y en el resto relacionados con la librería de Pandas, es necesario descargarnos esta librería (y la librería de Numpy). Para ello lo podemos descargar a través del repositorio de paquetes PyPi (con pip) de la siguiente manera:
$ pip install pandas $ pip install numpy
Vamos a ver a continuación ejemplos básicos con Series y DataFrame:
Lo primero que debemos hacer es importar la libreria de Pandas:
import pandas as pd
Por convenio (de la comunidad de desarrollares) se pone "pd" como alias de la librería Pandas.
El primer ejemplo que vamos a poner va a ser el de definir una estructura de datos "Series" que como ya comentamos es un array de datos unidimensional con idexación. Las "Series" se definen de la siguiente manera:
serie = pd.Series(data, index=index)
Es decir, que en el primer parámetro le indicamos los datos del array y en el segundo parámetro los índices. Veamos un ejemplo de como crear una estructura "Series" con los integrantes de la selección Española de fútbol que ganó el mudial del año 2010, en el que tenemos como 'data' sus nombres y como índice su dorsal:
spanishPlayers = pd.Series( ['Casillas', 'Ramos', 'Pique', 'Puyol', 'Capdevila', 'Xabi Alonso', 'Busquets', 'Xavi Hernandez', 'Pedrito', 'Iniesta', 'Villa'], index=[1, 15, 3, 5, 11, 14, 16, 8, 18, 6, 7]) print "Spanish Football Players: \n%s" % spanishPlayers
Como salida a este fragmento de código en el que se va a imprimir por pantalla la Serie es la siguiente, en la que verémos lo anteriormente mencionado:
Spanish Football Players: 1 Casillas 15 Ramos 3 Pique 5 Puyol 11 Capdevila 14 Xabi Alonso 16 Busquets 8 Xavi Hernandez 18 Pedrito 6 Iniesta 7 Villa dtype: object
En el siguiente caso; en el que no le indiquemos los índices de forma explícita, no generará los índices de forma automática empezando desde el valor cero:
spanishPlayers = pd.Series( ['Casillas', 'Ramos', 'Pique', 'Puyol', 'Capdevila', 'Xabi Alonso', 'Busquets', 'Xavi Hernandez', 'Pedrito', 'Iniesta', 'Villa']) print "Spanish Football Players: \n%s" % spanishPlayers
Como salida tenemos lo siguiente:
Spanish Football Players: 0 Casillas 1 Ramos 2 Pique 3 Puyol 4 Capdevila 5 Xabi Alonso 6 Busquets 7 Xavi Hernandez 8 Pedrito 9 Iniesta 10 Villa dtype: object
También podemos crearnos una estructura de datos "Series" a partir de una lista o de un diccionario. Si la construimos a partir de una lista nos pondrá los índices por defecto y si lo creamos a partir de un diccionario, pondrá como índices las claves. Vamos a ver a continuación un ejemplo de como crear una Serie a partir de un diccionario y además vamos a ver como insertar en esta serie un nuevo elemento:
dictPlayers = {1: 'Casillas', 15: 'Ramos', 3: 'Pique', 5: 'Puyol', 11: 'Capdevila', 14: 'Xabi Alonso', 16: 'Busquets', 8: 'Xavi Hernandez', 18: 'Pedrito', 6: 'Iniesta', 7: 'Villa'} players2series = pd.Series(dictPlayers) # Insert new player players2series[10] = 'Cesc' print "Spanish Football Players through dictionary: \n%s" % players2series
Como salida a este fragmento de código tenemos lo siguiente:
Spanish Football Players through dictionary: 1 Casillas 3 Pique 5 Puyol 6 Iniesta 7 Villa 8 Xavi Hernandez 11 Capdevila 14 Xabi Alonso 15 Ramos 16 Busquets 18 Pedrito 10 Cesc dtype: object
Vamos a pasar a continuación a ver un ejemplo con la estructura de datos "DataFrame". Como ya se ha comentado es una estructura de datos similar a una tabla de una base de datos relacionar, una tabla de excel, etc. y como tal se pueden hacer muchas operaciones como las que se harían con consultas a tablas de bases de datos o en excel (este tipo de operaciones se pueden ver en los siguiente tutoriales: "DataFrame: Lectura y Escritura, Mergeo de DataFrame's y GroupBy" y "Operaciones de "Pivot_table" con DataFrame's").
Para construir un DataFrame se puede hacer de diferentes formas, como por ejemplo a partir de una lista, de un diccionario, de una Serie, de otro DataFrame, leyendo una tabla excel, csv, etc. Vamos a ver a continuación como construiríamos un DataFrame con datos de los integrantes de la selección Española de Fútbol:
spanishPlayersDF = pd.DataFrame( { 'name': ['Casillas', 'Ramos', 'Pique', 'Puyol', 'Capdevila', 'Xabi Alonso', 'Busquets', 'Xavi Hernandez', 'Pedrito', 'Iniesta', 'Villa'], 'demarcation': ['Goalkeeper', 'Right back', 'Centre-back', 'Centre-back', 'Left back', 'Defensive midfield', 'Defensive midfield', 'Midfielder', 'Left winger', 'Right winger', 'Centre forward'], 'team': ['Real Madrid', 'Real Madrid', 'FC Barcelona', 'FC Barcelona', 'Villareal', 'Real Madrid', 'FC Barcelona', 'FC Barcelona', 'FC Barcelona', 'FC Barcelona', 'FC Barcelona'] }, columns=['name', 'demarcation', 'team'], index=[1, 15, 3, 5, 11, 14, 16, 8, 18, 6, 7] )
Vemos como en primer lugar le pasamos como parámetro un diccionario que contiene como claves los nombres de las columnas y como valores una lista con los datos que tendrá cada columna de la tupla. En segundo lugar le pasamos el nombre de las columnas que coinciden con las claves del diccionario con los datos y por último el índice de cada una de las tuplas. Si imprimimos el contenido de este DataFrame tenemos los siguiente:
name demarcation team 1 Casillas Goalkeeper Real Madrid 15 Ramos Right back Real Madrid 3 Pique Centre-back FC Barcelona 5 Puyol Centre-back FC Barcelona 11 Capdevila Left back Villareal 14 Xabi Alonso Defensive midfield Real Madrid 16 Busquets Defensive midfield FC Barcelona 8 Xavi Hernandez Midfielder FC Barcelona 18 Pedrito Left winger FC Barcelona 6 Iniesta Right winger FC Barcelona 7 Villa Centre forward FC Barcelona
Como resultado tenemos una estructura de dato similar a la de una tabla de una base de datos relacional o de un documento excel o csv. Con esta estructura de datos se pueden hacer muchas operaciones como las que haríamos en una base de datos o en un documento excel.
Por último vamos a ver como insertar un nuevo elemento en este DataFrame, que lo haríamos de la siguiente manera con el método "loc()":
# Insert new player spanishPlayersDF.loc[10] = ['Cesc', 'Forward', 'Arsenal']
Vemos que le indicamos el índice que tiene que tener en la tabla (como lo haríamos con un diccionario) y luego con una lista indicamos los valores de las columnas. Como resultado tendríamos un nuevo elemento de el DataFrame:
Spanish Football Players DataFrame: name demarcation team 1 Casillas Goalkeeper Real Madrid 15 Ramos Right back Real Madrid 3 Pique Centre-back FC Barcelona 5 Puyol Centre-back FC Barcelona 11 Capdevila Left back Villareal 14 Xabi Alonso Defensive midfield Real Madrid 16 Busquets Defensive midfield FC Barcelona 8 Xavi Hernandez Midfielder FC Barcelona 18 Pedrito Left winger FC Barcelona 6 Iniesta Right winger FC Barcelona 7 Villa Centre forward FC Barcelona 10 Cesc Forward Arsenal
CONCLUSIONES:
La finalidad de este tutorial es dar a conocer las dos estructuras de datos (Series y DataFrame's) más utilizadas de la librería Pandas y como tál se han realizado ejemplos muy básicos. Se pueden hacer muchisimas cosas más; algunas de las cuales las explicamos en los tutoriales "DataFrame: Lectura y Escritura, Mergeo de DataFrame's y GroupBy" y "Operaciones de "Pivot_table" con DataFrame's". Si queréis saber más sobre la librería de Pandas lo podéis hacer mirando en el siguiente enlace su extensa y detallada documentación: http://pandas.pydata.org/pandas-docs/stable/
Com puedo instalar pandas para trabajar en Sublime Text ?
Pandas lo puedes instalar con PIP de Python (explicamos como usar y configurar PIP en https://jarroba.com/curso-de-python-6-bilbiotecas-paquetes/)
Sublime Text es casi un IDE que sirve para escribir código que puede ser Python u otro. Aunque con los plugins adecuados puede convertirse en un IDE de Python.
En resumen rápido, Pandas se instala en la carpeta Lib de Python mediante PIP (más información sobre los entornos de Python en https://jarroba.com/entornos-de-python-anaconda-y-comun/), y Sublime Text es otra cosa que no tiene que ver con Python (aunque se pueda usar para escribir código de Python, al igual que se puede usar el bloc de notas)
Utililizando SublimeText, con el ejemplo me aparece el siguiente error:
Traceback (most recent call last):
File «serie-pandas.py», line 6, in
serie = pd.Series(data, index=index)
NameError: name ‘data’ is not defined
***Repl Closed***
Buenas Frank,
Justo esa línea era de introducción al siguiente código. Es decir, que «data» es un listado con los datos que ahí no está definido.
Para utilizar el código anterior tienes que definir «data» e «index» como:
mi pregunta viene en que si quiero hacer una consulta llamando nombre especifico de tres columnos diferentes, algo asi como que tengo 10 columnas pero solo quiero llamar a las que se llamen maria y tengan 20 años, que me salga sus demas infos !! :c
Podrías realizar una consulta como la siguiente («nombre» y «edad» son columnas, «df» es el DataFrame):
df2 = df[(df["nombre"]=="Maria") & (df["edad"]=20)]
hola! Gracias por esta gran aportación. Mi duda es como puedo agregar una columna a la base de datos (Dataframe), por ejemplo quiero agregar en la tabla una columna con el número total de goles que cada jugador tiene.
df.assign(goles=[3,4…..])
que editor de texto ocupas
¿Cómo editor de texto? ¿Te refieres al coloreado del código?