12. La librería Pandas
Pandas es una librería de Python especializada en el manejo y análisis de estructuras de datos.
Logo librería Pandas
Las principales características de esta librería son:
- Define nuevas estructuras de datos basadas en los arrays de la librería NumPy pero con nuevas funcionalidades.
- Permite leer y escribir fácilmente ficheros en formato CSV, Excel y bases de datos SQL.
- Permite acceder a los datos mediante índices o nombres para filas y columnas.
- Ofrece métodos para reordenar, dividir y combinar conjuntos de datos.
- Permite trabajar con series temporales.
- Realiza todas estas operaciones de manera muy eficiente.
Pandas dispone de tres estructuras de datos diferentes:
- Series: Estructura de una dimensión.
- DataFrame: Estructura de dos dimensiones (tablas).
- Panel: Estructura de tres dimensiones (cubos).
Estas estructuras se construyen a partir de arrays de la librería NumPy, añadiendo nuevas funcionalidades.
Son estructuras similares a los arrays de una dimensión. Son homogéneas, es decir, sus elementos tienen que ser del mismo tipo, y su tamaño es inmutable, es decir, no se puede cambiar, aunque si su contenido.
Dispone de un índice que asocia un nombre a cada elemento del la serie, a través de la cuál se accede al elemento.
Ejemplo. La siguiente serie contiene las asignaturas de un curso.
Ejemplo de serie
- Series(data=lista, index=indices, dtype=tipo) : Devuelve un objeto de tipo Series con los datos de la lista lista, las filas especificados en la lista indices y el tipo de datos indicado en tipo. Si no se pasa la lista de índices se utilizan como índices los enteros del 0 al n — 1, done n es el tamaño de la serie. Si no se pasa el tipo de dato se infiere.
- Series (data=diccionario, index=indices): Devuelve un objeto de tipo Series con los valores del diccionario diccionario y las filas especificados en la lista indices. Si no se pasa la lista de índices se utilizan como índices las claves del diccionario.
Existen varias propiedades o métodos para ver las características de una serie.
- s.size : Devuelve el número de elementos de la serie s.
- s.index : Devuelve una lista con los nombres de las filas del DataFrame s.
- s.dtype : Devuelve el tipo de datos de los elementos de la serie s.
El acceso a los elementos de un objeto del tipo Series puede ser a través de posiciones o través de índices (nombres).
Se realiza de forma similar a como se accede a los elementos de un array.
- s[i] : Devuelve el elemento que ocupa la posición i+1 en la serie s.
- s[nombres]: Devuelve otra serie con los elementos con los nombres de la lista nombres en el índice.
- s[nombre] : Devuelve el elemento con el nombre nombre en el índice.
- s[nombres] : Devuelve otra serie con los elementos correspondientes a los nombres indicadas en la lista nombres en el índice.
Las siguientes funciones permiten resumir varios aspectos de una serie:
- s.count() : Devuelve el número de elementos que no son nulos ni NaN en la serie s.
- s.sum () : Devuelve la suma de los datos de la serie s cuando los datos son de un tipo numérico, o la concatenación de ellos cuando son del tipo cadena str.
- s.cumsum() : Devuelve una serie con la suma acumulada de los datos de la serie s cuando los datos son de un tipo numérico.
- s.value_counts() : Devuelve una serie con la frecuencia (número de repeticiones) de cada valor de la serie s.
- s.min() : Devuelve el menor de los datos de la serie s.
- s.max () : Devuelve el mayor de los datos de la serie s.
- s.mean() : Devuelve la media de los datos de la serie s cuando los datos son de un tipo numérico.
- s.std() : Devuelve la desviación típica de los datos de la serie s cuando los datos son de un tipo numérico.
- s.describe(): Devuelve una serie con un resumen descriptivo que incluye el número de datos, su suma, el mínimo, el máximo, la media, la desviación típica y los cuartiles.
Los operadores binarios (+, *, /, etc.) pueden utilizarse con una serie, y devuelven otra serie con el resultado de aplicar la operación a cada elemento de la serie.
También es posible aplicar una función a cada elemento de la serie mediante el siguiente método:
- s.apply(f) : Devuelve una serie con el resultado de aplicar la función f a cada uno de los elementos de la serie s.
Para filtrar una serie y quedarse con los valores que cumplen una determinada condición se utiliza el siguiente método:
- s[condicion] : Devuelve una serie con los elementos de la serie s que se corresponden con el valor True de la lista booleana condición. condición debe ser una lista de valores booleanos de la misma longitud que la serie.
Para ordenar una serie se utilizan los siguientes métodos:
- s.sort_values(ascending=booleano) : Devuelve la serie que resulta de ordenar los valores la serie s. Si argumento del parámetro ascending es True el orden es creciente y si es False decreciente.
- df.sort_index(ascending=booleano): Devuelve la serie que resulta de ordenar el índice de la serie s. Si el argumento del parámetro ascending es True el orden es creciente y si es False decreciente.
Los datos desconocidos representan en Pandas por NaN y los nulos por None. Tanto unos como otros suelen ser un problema a la hora de realizar algunos análisis de datos, por lo que es habitual eliminarlos. Para eliminarlos de una serie se utiliza el siguiente método:
- s.dropna () : Elimina los datos desconocidos o nulos de la serie s.
Un objeto del tipo DataFrame define un conjunto de datos estructurado en forma de tabla donde cada columna es un objeto de tipo Series, es decir, todos los datos de una misma columna son del mismo tipo, y las filas son registros que pueden contender datos de distintos tipos.
Un DataFrame contiene dos índices, uno para las filas y otro para las columnas, y se puede acceder a sus elementos mediante los nombres de las filas y las columnas.
Ejemplo. El siguiente DataFrame contiene información sobre los alumnos de un curso. Cada fila corresponde a un alumno y cada columna a una variable.
Ejemplo de DataFrame
Para crear un DataFrame a partir de un diccionario cuyas claves son los nombres de las columnas y los valores son listas con los datos de las columnas se utiliza el método:
- DataFrame(data=diccionario, index=filas, columns=columnas, dtype=tipos)
: Devuelve un objeto del tipo DataFrame cuyas columnas son las listas contenidas en los valores del diccionario diccionario, los nombres de filas indicados en la lista filas, los nombres de columnas indicados en la lista columnas y los tipos indicados en la lista tipos. La lista filas tiene que tener el mismo tamaño que las listas del diccionario, mientras que las listas columnas y tipos tienen que tener el mismo tamaño que el diccionario. Si no se pasa la lista de filas se utilizan como nombres los enteros empezando en 0. Si no se pasa la lista de columnas se utilizan como nombres las claves del diccionario. Si no se pasa la lista de tipos, se infiere.Python
Los valores asociados a las claves del diccionario deben ser listas del mismo tamaño.
Para crear un DataFrame a partir de una lista de listas con los datos de las columnas se utiliza el siguiente método:
- DataFrame(data=listas, index=filas, columns=columnas, dtype=tipos) : Devuelve un objeto del tipo DataFrame cuyas columnas son los valores de las listas de la lista listas, los nombres de filas indicados en la lista filas, los nombres de columnas indicados en la lista columnas y los tipos indicados en la lista tipos. La lista filas, tiene que tener el mismo tamaño que la lista listas mientras que las listas columnas y tipos tienen que tener el mismo tamaño que las listas anidadas en listas. Si no se pasa la lista de filas o de columnas se utilizan enteros empezando en 0. Si no se pasa la lista de tipos, se infiere.
Si las listas anidadas en listas no tienen el mismo tamaño, las listas menores se rellenan con valores NaN.