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:

  1. Parte I: Introducción a Pandas.
  2. Parte II: DataFrame: Lectura y Escritura, Mergeo de DataFrame's y GroupBy.
  3. 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/

Comparte esta entrada en:
Safe Creative #1401310112503
Pandas en Python, con ejemplos -Parte I- Introducción por "www.jarroba.com" esta bajo una licencia Creative Commons
Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License.
Creado a partir de la obra en www.jarroba.com

10 thoughts on “Pandas en Python, con ejemplos -Parte I- Introducción”

    1. 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)

  1. 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***

    1. 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:

      data = ['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]
      
      serie = pd.Series(data, index=index)
      
  2. 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

    1. 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)]

  3. 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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies

ACEPTAR
Aviso de cookies