12. Tópicos extra#
En este anexo se revisan algunos tópicos específicos relacionados a la librería pandas
que no fueron cubiertos anteriormente, estos son
Objeto
pandas.Series
Gráficos a partir de objetos de pandas
Guardar y leer datos en formato HDF5
%matplotlib inline
import matplotlib.pyplot as plt
import pandas as pd
12.1. Objeto pandas.Series
#
El objeto pandas.Series
es un arreglo de una dimensión (vector) que representa una secuencia
Los elementos de la secuencia se identifican con un índice etiquetado
index
Todos los elementos son de un mismo tipo
dtype
La serie se identifica con un nombre
name
A continuación veremos algunas formas de crear Series
Construyendo un objeto Series
a partir de un dataframe
Cuando pedimos una columna de un DataFrame el objeto retornado es de tipo Series
Tecnicamente, una fila de un DataFrame también retorna como Series
sin embargo los tipos se mezclan
clientes = ['Pablo', 'Marianna', 'Matthieu', 'Luis', 'Eliana', 'Cristobal']
ventas = {
'lechugas [unidades]': [1, 0, 1, 2, 0, 0],
'papas [kilos]': [0.5, 2, 1.5, 1.2, 0, 5]
}
df = pd.DataFrame(data=ventas, index=clientes)
display(f'La columna de lechugas es un objeto {type(df["lechugas [unidades]"])}',
f'cuyo tipo es {df["lechugas [unidades]"].dtype}',
f'La fila Matthieu es un objeto {type(df.loc["Matthieu"])}',
f'cuyo tipo es {df.loc["Matthieu"].dtype}')
"La columna de lechugas es un objeto <class 'pandas.core.series.Series'>"
'cuyo tipo es int64'
"La fila Matthieu es un objeto <class 'pandas.core.series.Series'>"
'cuyo tipo es float64'
Construyendo un objeto Series
a partir de otras estructuras de datos
Un objeto Series
se puede crear de forma más general usando el constructor
pandas.Series(data=None,
index=None,
dtype=None,
name=None,
copy=False,
fastpath=False)
donde data
puede ser un diccionarios, una lista o un ndarray
Por ejemplo:
plan_diario= {'dormir': 7, 'comer': 1, 'quehaceres': 1, 'trabajo': 10, 'procastinar': 5}
pd.Series(plan_diario, name='mi planificación de hoy')
dormir 7
comer 1
quehaceres 1
trabajo 10
procastinar 5
Name: mi planificación de hoy, dtype: int64
Nota
Una columna o una fila de un
DataFrame
es unSeries
Varias
Series
se pueden unir para formar unDataFrame
12.2. Gráfico a partir de DataFrames#
Se pueden crear gráficos sencillos directamente de un DataFrame
Puedes revisar en detalle la API para graficar en este link
fig, ax = plt.subplots(figsize=(6, 4), tight_layout=True)
df.plot(ax=ax, kind='line', subplots=True);
/tmp/ipykernel_23473/1562864067.py:2: UserWarning: To output multiple subplots, the figure containing the passed axes is being cleared.
df.plot(ax=ax, kind='line', subplots=True);
La API es útil para hacer gráficos rapidamente. Si necesitamos mayor flexibilidad que la que ofrece la API siempre podemos extraer la data y graficarla con matplotlib
o seaborn
12.3. Guardar y leer una tabla en formato HDF5#
Podemos usar el atributo to_hdf
para convertir nuestra tabla a formato HDF5
df.to_hdf(path_or_buf, # Path completo con nombre de archivo
key: str, # Llave maestra del archivo
mode: str = 'a', # Agrega lineas a un archivo existente (a) o crea una archivo nuevo (w)
...
)
Por ejemplo
df.to_hdf("pandas_hdf.h5", key='excel', mode='w')
crea un archivo pandas_hdf.h5 en el directorio actual
Para lectura podemos usar la función read_hdf
mi_tabla_recuperada = pd.read_hdf("pandas_hdf.h5", key='/excel', mode='r')
Nota
Para tener esta funcionalidad se requiere instalar Pytables mayor a 3.5: PyTables/PyTables#719
Si necesita trabajar directamente sobre un archivo HDF5 en Python puede usar las librerías PyTables
o h5py
. A continuación se muestra un ejemplo con esta última:
import h5py
with h5py.File("pandas_hdf.h5", mode="r") as f:
print(f["excel"].keys())
print(f["excel"]['block0_items'][()])