Series y DataFrame en Python

Hace un par de meses, tomé el curso en línea "Uso de Python para la investigación" que ofrece la Universidad de Harvard sobre edX. Mientras tomaba el curso, aprendí muchos conceptos de Python, NumPy, Matplotlib y PyPlot. También tuve la oportunidad de trabajar en estudios de casos durante este curso y pude utilizar mis conocimientos en conjuntos de datos reales. Para obtener más información sobre este programa, consulte aquí.

Aprendí dos conceptos importantes en este curso: Series y DataFrame. Quiero presentarles estos a través de un breve tutorial.

Para comenzar con el tutorial, obtengamos el último código fuente de Python del sitio web oficial aquí.

Una vez que haya instalado Python, utilizará una interfaz gráfica de usuario llamada IDLE para trabajar con Python.

Importemos Pandas a nuestro espacio de trabajo. Pandas es una biblioteca de Python que proporciona estructuras de datos y herramientas de análisis de datos para diferentes funciones.

Serie

Una serie es un objeto unidimensional que puede contener cualquier tipo de datos, como enteros, flotantes y cadenas. Tomemos una lista de elementos como argumento de entrada y creemos un objeto Serie para esa lista.

>>> import pandas as pd
>>> x = pd.Series([6,3,4,6])
>>> x
0 6
1 3
2 4
3 6
dtype: int64

Las etiquetas de eje para los datos se denominan índice. La longitud del índice debe ser la misma que la longitud de los datos. Dado que no hemos pasado ningún índice en el código anterior, el índice predeterminado se creará con valores[0, 1, … len(data) -1]

Sigamos adelante y definamos índices para los datos.

>>> x = pd.Series([6,3,4,6], index=[‘a’, ‘b’, ‘c’, ‘d’])
>>> x
a 6
b 3
c 4
d 6
dtype: int64

El índice de la columna más a la izquierda ahora se refiere a los datos de la columna de la derecha.

Podemos buscar los datos consultando su índice:

>>> x[“c”]
4

Python nos da los datos relevantes para el índice.

Un ejemplo de un tipo de datos es el diccionario que se define a continuación. El índice y los valores se correlacionan con las claves y los valores. Podemos usar el índice para obtener los valores de los datos correspondientes a las etiquetas del índice.

>>> data = {‘abc’: 1, ‘def’: 2, ‘xyz’: 3}
>>> pd.Series(data)
abc 1
def 2
xyz 3
dtype: int64

Otra característica interesante de Series es tener datos como valor escalar. En ese caso, el valor de los datos se repite para cada uno de los índices definidos.

>>> x = pd.Series(3, index=[‘a’, ‘b’, ‘c’, ‘d’])
>>> x
a 3
b 3
c 3
d 3
dtype: int64

Marco de datos

Un DataFrame es un objeto bidimensional que puede tener columnas con diferentes tipos potenciales. Los diferentes tipos de entradas incluyen diccionarios, listas, series e incluso otro DataFrame.

Es el objeto pandas más utilizado.

Sigamos adelante y creemos un DataFrame pasando una matriz NumPy con fecha y hora como índices y columnas etiquetadas:

>>> import numpy as np
>>> dates = pd.date_range(‘20170505’, periods = 8)
>>> dates
DatetimeIndex([‘2017–05–05’, ‘2017–05–06’, ‘2017–05–07’, ‘2017–05–08’,
‘2017–05–09’, ‘2017–05–10’, ‘2017–05–11’, ‘2017–05–12’],
dtype=’datetime64[ns]’, freq=’D’)
>>> df = pd.DataFrame(np.random.randn(8,3), index=dates, columns=list(‘ABC’))
>>> df
A B C
2017–05–05 -0.301877 1.508536 -2.065571
2017–05–06 0.613538 -0.052423 -1.206090
2017–05–07 0.772951 0.835798 0.345913
2017–05–08 1.339559 0.900384 -1.037658
2017–05–09 -0.695919 1.372793 0.539752
2017–05–10 0.275916 -0.420183 1.744796
2017–05–11 -0.206065 0.910706 -0.028646
2017–05–12 1.178219 0.783122 0.829979

Se crea un DataFrame con un rango de fecha y hora de 8 días como se muestra arriba. Podemos ver las filas superior e inferior del marco usando df.heady df.tail:

>>> df.head()
A B C
2017–05–05 -0.301877 1.508536 -2.065571
2017–05–06 0.613538 -0.052423 -1.206090
2017–05–07 0.772951 0.835798 0.345913
2017–05–08 1.339559 0.900384 -1.037658
2017–05–09 -0.695919 1.372793 0.539752
>>> df.tail()
A B C
2017–05–08 1.339559 0.900384 -1.037658
2017–05–09 -0.695919 1.372793 0.539752
2017–05–10 0.275916 -0.420183 1.744796
2017–05–11 -0.206065 0.910706 -0.028646
2017–05–12 1.178219 0.783122 0.829979

También podemos observar un resumen estadístico rápido de nuestros datos:

>>> df.describe()
A B C
count 8.000000 8.000000 8.000000
mean 0.372040 0.729842 -0.109691
std 0.731262 0.657931 1.244801
min -0.695919 -0.420183 -2.065571
25% -0.230018 0.574236 -1.079766
50% 0.444727 0.868091 0.158633
75% 0.874268 1.026228 0.612309
max 1.339559 1.508536 1.744796

También podemos aplicar funciones a los datos como suma acumulativa, ver histogramas, fusionar DataFrames, concatenar y remodelar DataFrames.

>>> df.apply(np.cumsum)
A B C
2017–05–05 -0.301877 1.508536 -2.065571
2017–05–06 0.311661 1.456113 -3.271661
2017–05–07 1.084612 2.291911 -2.925748
2017–05–08 2.424171 3.192296 -3.963406
2017–05–09 1.728252 4.565088 -3.423654
2017–05–10 2.004169 4.144905 -1.678858
2017–05–11 1.798104 5.055611 -1.707504
2017–05–12 2.976322 5.838734 -0.877526

Puede leer más detalles sobre estas estructuras de datos aquí.