Pandas (I)

Antes de nada, el contexto, para esta serie de entradas se va a usar lo siguiente:

Y sin más preámbulos…

¿Qué es Pandas?

Pandas es una librería que proporciona estructuras de datos flexibles y permite trabajar con la información de forma eficiente (gran parte de Pandas está implementado usando C/Cython para obtener un buen rendimiento).

Funciona muy bien cuando nos toca trabajar con:

  • Datos heterogéneos que pueden distribuirse de forma tabular.
  • Series temporales
  • Matrices

La página oficial se encuentra en el siguiente enlace.

Estructuras de datos

Pandas ofrece varias estructuras de datos que nos resultarán de mucha utilidad y que vamos a ir viendo poco a poco. Todas las posibles estructuras de datos que ofrece a día de hoy son:

  • Series (y TimeSeries)
  • DataFrame
  • Panel
  • Panel4D
  • PanelND

Series

En una instancia de la clase Series podremos almacenar arrays o vectores con índice o etiqueta. Si no usamos índice o etiqueta nos lo numerará con un índice de forma interna. La forma básica de crear una Series sería:

donde data es el vector de datos e index (opcional) es el vector de índices que usará la serie.

Si los índices son datos de fechas directamente se creará una instancia de una TimeSeries en lugar de una instacia de Series.

Veamos un ejemplo de como crear este tipo de contenedor de datos. Primero vamos a crear una serie y pandas nos creará índices automáticamente, segundo vamos a crear una serie donde nosotros le vamos a decir los índices que queremos usar y, tercero, vamos a crear una serie temporal usando índices que son fechas.

Cuyo resultado sería:

Cuyo resultado sería el siguiente:

Cuyo resultado sería:

En los ejemplos anteriores hemos creado las series a partir de un numpy array pero las podemos crear a partir de muchas otras cosas: listas, diccionarios, numpy arrays,… Veamos ejemplos:

Y el resultado del código anterior sería:

Una serie (Series o TimeSeries) se puede manejar igual que si tuviéramos un numpy array de una dimensión o igual que si tuviéramos un diccionario.

Vemos ejemplos de esto:

Y el resultado será:

Las operaciones están ‘vectorizadas’ y se hacen elemento a elemento con los elementos alineados en función del índice. Si se hace, por ejemplo, una suma de dos series, si en una de las dos series no existe un elemento, i.e. el índice no existe en la serie, el resultado para ese índice será nan. En resumen, estamos haciendo una unión de los índices y funciona diferente a los numpy arrays. Se puede ver el esquema en el siguiente ejemplo:

Cuyo resultado será:

DataFrame

Un DataFrame se puede ver como si fuera una tabla con índices para las filas y las columnas. Es algo similar a lo que tenemos en una hoja de cálculo, una tabla de una BBDD SQL o un diccionario de series Pandas. Esta será la estructura de datos más habitual a usar. El DataFrame se puede crear a partir de muchas otras estructuras de datos:

  • A partir de un diccionario de numpy arrays de 1D, diccionarios de listas, diccionarios de diccionarios o diccionarios de Series
  • A partir de un numpy array de 2D
  • A partir de un numpy array estructurado (structured ndarray o record ndarray)
  • A partir de una Series de Pandas
  • A partir de otro DataFramede Pandas

Además de los datos, podemos definir los índices (las etiquetas para las filas) o las columnas (etiquetas para las mismas). Si no se define nada al crear el DataFrame se usarán normas del sentido común para nombrar los índices de filas y columnas.

Veamos un poco de código para ver esto:

Y el resultado de todo lo anterior sería:

Podemos construir un DataFrame a partir de constructores alternativos como pd.DataFrame.from_dict, pd.DataFrame.from_records o pd.DataFrame.from_items.

Panel, Panel4D, PanelND

En general, los paneles son para tipos de datos de más de dos dimensiones. No los vamos a cubrir ya que se consideran un pelín más complejos, de uso menos habitual y/o se encuentran en estado experimental con lo que pueden cambiar bastante en el corto/medio plazo. Se puede consultar la documentación oficial pulsando sobre:

  • Panel
  • Panel4D
  • PanelND

Y de momento es suficiente por hoy.  En breve dejaremos una segunda parte… ¡¡Estad atentos!!

5 pensamientos sobre “Pandas (I)”

  1. Pingback: Reseña del libro “Learning NumPy Array” de Ivan Idris | Pybonacci

  2. Kiko, gracias por el curso.
    Estoy comenzando con Python. IPython Notebook me corre con Python 2. ¿Cómo puedo hacer que corra con Python 3?

    1. instala Python3 y luego ipython para Python3.
      Puedes usar un virtualenv o un entorno de conda.
      Ahora estoy con el móvil pero luego te dejo un par de enlaces

  3. Tengo una duda:
    Cuando construyes el DataFrame a partir de un numpy array 2D, no arrojarría un dataframe de 5×3 vacío? Cuándo le has pasado el random…?
    Muchas Gracias.
    como diría mi hija:
    “Maestro”

  4. No.
    El DataFrame se te creará con lo que le digas que lo cree. Si usas numpy.random.randn(5,3), por ejemplo, te creará un dataframe con valores aleatorios con *shape* (5, 3).
    Si quieres crear un dataframe vacio puedes hacer ‘df = pd.DataFrame()’ pero este dataframe no tendrá estructura (filas x columnas) hasta que le metas datos.

Deja una respuesta

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

three + three =