8.3 pandas
pandas es un paquete open-source que nos proporciona una forma sencilla y potente de trabajar con estructuras de datos a través de múltiples herramientas para su análisis.
La forma más común de importar esta librería es usar el alias pd:
Si bien en Numpy la estructura de datos fundamental es el ndarray, en pandas existen dos estructuras de datos sobre las que giran todas las operaciones:
- Series.
- Dataframes.
Podríamos pensar en una serie como un ndarray en el que cada valor tiene asignado una etiqueta (índice) y además admite un título (nombre).
Creación de una serie
Veamos varios ejemplos de creación de la serie [1,2, 3].
Creación de series usando listas:
Especificando un índice personalizado (etiqueta a cada valor):
Especificando un diccionario con etiquetas y valores:
Todas las series que hemos visto hasta ahora no tienen asignado ningún nombre. Lo podemos hacer usando el parámetro name en la creación de la serie:
Ejercicio
Cree una serie de pandas con valores enteros en el intervalo [1,26] y etiquetas ’ABCDEFGHIJKLMNOPQRSTUVWXYZ’. Busque una manera programática (no manual) de hacerlo (recuerde el módulo string).
Atributos de una serie
Las series en pandas contienen gran cantidad de atributos. A continuación destacaremos algunos de ellos.
Trabajaremos con datos que contienen el número de empleados/as de diferentes empresas tecnológicas:
Índice de la serie:
Valores de la serie:
Tipo de la serie:
Nombre de la serie:
Memoria ocupada por la serie:
Número de registros de la serie:
Selección de registros
La selección de los datos se puede realizar desde múltiples aproximaciones. A continuación veremos las posiblidades que nos ofrece pandas para seleccionar/filtrar los registros de una serie.
Selección usando indexado numérico
Para acceder a los registros por su posición (índice numérico) basta usar corchetes como ya se ha visto en cualquier secuencia:
El atributo iloc es un alias (algo más expresivo) que permite realizar las mismas operaciones de indexado (con corchetes) que hemos visto anteriormente:
Truco: Python, y en este caso pandas, se dicen «0-index» porque sus índices (posiciones) comienzan en cero.
Selección usando etiquetas
En el caso de aquellas series que dispongan de un índice con etiquetas, podemos acceder a sus registros utilizando las mismas:
El atributo loc es un alias (algo más expresivo) que permite realizar las mismas operaciones de indexado (con corchetes) que hemos visto anteriormente:
Fragmentos de comienzo y fin
A nivel exploratorio, es bastante cómodo acceder a una porción inicial (o final) de los datos que manejamos. Esto se puede hacer de forma muy sencilla con series:
Operaciones con series
Si tenemos en cuenta que una serie contiene valores en formato ndarray podemos concluir que las operaciones sobre arrays son aplicables al caso de las series. Veamos algunos ejemplos de operaciones que podemos aplicar sobre series.
Operaciones lógicas
Supongamos que queremos filtrar aquellas empresas que tengan más de 200000 trabajadores/as:
Hemos obtenido una serie «booleana». Si queremos aplicar esta «máscara», podemos hacerlo con indexado:
Ordenación
Ordenación de una serie por sus valores:
Ordenación de una serie por su índice:
Truco: Ambos métodos admiten el parámetro ascending para indicar si la ordenación es ascendente (True) o descendente (False); y también admiten el parámetro inplace para indicar si se quiere modificar los valores de la serie (True) o devolver una nueva ya ordenada (False).
Contando valores
Si queremos obtener una «tabla de frecuencias» podemos contar los valores que existen en nuestra serie:
Vinculado con el caso anterior, podemos obtener el número de valores únicos en la serie:
El método count() devuelve el número de valores «no nulos» que contiene la serie:
Operaciones aritméticas
Operaciones entre series y escalares
Podemos operar entre series y escalares sin ningún tipo de problema:
Operaciones entre series
Para el caso de operaciones entre series, vamos a ejemplificarlo con las dos siguientes:
Supongamos que queremos calcular la ratio de ingresos por trabajador/a:
Truco: Tener en cuenta que las operaciones se realizan entre registros que tienen el mismo índice (etiqueta).
Funciones estadísticas
Existen multitud de funciones estadísticas que podemos aplicar a una serie. Dependiendo del tipo de dato con el que estamos trabajando, serán más útiles unas que otras. Veamos dos funciones a modo de ejemplo:
Máximos y mínimos
El abanico de posibilidades es muy amplio en cuanto a la búsqueda de valores máximos y mínimos en una serie. Veamos lo que nos ofrece pandas a este respecto.
Obtener valor mínimo/máximo de una serie:
Posición (índice) del valor mínimo/máximo de una serie:
Etiqueta (índice) del valor mínimo/máximo de una serie:
Obtener los n valores menores/mayores de una serie:
Exportación de series
Suele ser bastante habitual intercambiar datos en distintos formatos (y aplicaciones). Para ello, pandas nos permite exportar una serie a multitud de formatos. Veamos algunos de ellos:
Exportación de serie a lista:
Exportación de serie a diccionario:
Exportación de serie a csv:
Exportación de serie a json:
Exportación de serie a pandas.DataFrame
Y muchos otros como: to_clipboard(), to_numpy(), to_pickle(), to_string(), to_xarray(), to_excel(), to_hdf(), to_latex(), to_markdown(), to_period(), to_sql() o to_timestamp().