https://jarroba.com/pandas-python-ejemplos-parte-i-introduccion/
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)
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()”:
<h1>Insert new player</h1>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/