Librería Pandas de Python
Pandas es la herramienta más importante de la que disponen los científicos y analistas de datos que trabajan en Python hoy en día. Las razones son muchas y es que ofrece estructuras de datos poderosas, expresivas y flexibles que facilitan la manipulación y análisis de datos. Aunque las poderosas herramientas de Machine Learning y de visualización pueden llamar toda la atención, pero Pandas es la columna vertebral de la mayoría de los proyectos de datos.
Definición
Pandas se deriva del término Panel Data, un término econométrico para conjuntos de datos que incluyen observaciones en múltiples períodos de tiempo para los mismos individuos.
Es una librería de código abierto de Python que proporciona herramientas de análisis y manipulación de datos de alto rendimiento utilizando sus potentes estructuras de datos.
Esta librería se desarrolló debido a la necesidad de tener una herramienta flexible de alto rendimiento para el análisis de datos. Anteriormente Python se utilizaba para la manipulación y preparación de datos por lo que no era utilizado para Machine Learning, Pandas resolvió este problema. Usando esta librería podemos lograr cinco pasos típicos en el procesamiento y análisis de datos, independientemente del origen de los datos: cargar, preparar, manipular, modelar y analizar.
El DataFrame que es la estructura fundamental de Pandas, estos son estructuras de datos etiquetados bidimensionales con columnas de tipos potencialmente diferentes. Los Pandas DataFrame constan de tres componentes principales: los datos, el índice y las columnas.
Adicionalmente, con la estructura Pandas DataFrame puedes especificar los nombres de índice y columna. El índice indica la diferencia en las filas, mientras que los nombres de las columnas indican la diferencia en las columnas. Estos componentes son muy útiles cuando se requiera manipular los datos.
Pero con Pandas no solamente puedes manipular los datos, también puedes limpiarlos, transformarlos y analizarlos. Por ejemplo, si quieres explorar un conjunto de datos almacenados en un archivo CSV, con Pandas puedes extraer los datos del archivo y guardarlos en un DataFrame y luego podrás hacer las siguientes cosas:
- Calcular estadísticas y responder preguntas sobre los datos, como:
- ¿Cuál es el promedio, la mediana, el máximo o el mínimo de cada columna?
- La columna A se correlaciona con la columna B?
- ¿Cómo es la distribución de los datos en la columna C?
- Limpiar los datos haciendo cosas como eliminar los valores perdidos y filtrar las filas o columnas según algunos criterios.
- Almacenar los datos limpios y transformados de nuevo en un CSV, otro archivo o base de datos.
Los datos de Pandas se utilizan a menudo para alimentar el análisis estadístico en SciPy, para trazar funciones de matplotlib y algoritmos de Machine Learning en Scikit Learn.
NumPy vs Pandas
Pandas está construido sobre el paquete NumPy, lo que significa que gran parte de la estructura de NumPy se utiliza o se replica en Pandas. Pero hay una gran diferencia entre ambas librerías sobretodo en la forma en que se almacenan los datos.
Por ejemplo, los datos en NumPy se se almacenan de la siguiente forma:
Como puedes observar son arreglos muy parecidos a las matrices en donde no se tiene las etiquetas de las columnas ni filas, por lo que utilizar en la ciencia de datos o Machine Learning hace que sea muy difícil.
Por su parte, Pandas estructura los datos es de la siguiente forma:
Primeramente, tenemos las series, que serían matrices de una sola dimensión que son capaces de almacenar datos de cualquier tipo, pero acá lo importante y diferente con NumPy es que tiene un índice para las columnas, las cuales es asignada directamente por Pandas y que puede ser manipulada por el programador. Adicional a esto, la serie puede contener datos homogéneos, de tamaño inmutable y valores de datos mutables.
Por su parte los DataFrame son estructuras de dos dimensiones con columnas potencialmente diferentes que cuentan con índices tanto en las columnas como en las filas y que, por supuesto, pueden ser manipuladas por el programador. Otras características importantes de los DataFrame es que tiene datos heterogéneos y el tamaño y los datos pueden ser mutables.
Características de Pandas
Entendiendo todo lo explicado hasta ahora podemos hablar sobre las características principales de la librería Pandas:
- Objeto DataFrame rápido y eficiente con indexación predeterminada y personalizada.
- Herramientas para cargar datos en objetos de datos en memoria desde diferentes formatos de archivo.
- Alineación de datos y manejo integrado de datos faltantes.
- Remodelación y giro de conjuntos de fechas.
- Etiquetado, corte, indexación y subconjunto de grandes conjuntos de datos.
- Las columnas de una estructura de datos se pueden eliminar o insertar.
- Agrupa por datos para agregación y transformaciones.
- Alto rendimiento de fusión y unión de datos.
- Funcionalidad de la serie de tiempo.
Instalación de Pandas
La instalación estándar de Python no viene con la librería Pandas instalada por lo que se utilizar el paquete de instalación, pip. En caso de que estés utilizando el paquete de Python Anaconda, no te tienes que preocupar, esta viene instalada por defecto.
Para utilizarla en tus programas de Machine Learning solamente debes importarla utilizando el alias pd, este es el estándar que se utiliza para esta librería, como lo es np, para la librería NumPy. Recuerda que cuando codificas en tu propio entorno de entorno de Machine Learning no debes olvidar este paso tan importante.
import pandas as pd
Estructura de datos de Pandas
Como lo explicamos previamente, los dos componentes principales de Pandas son la Serie y el DataFrame.
Comencemos explicando las Series de Pandas, estas son una estructura de datos unidimensional que puede almacenar valores y para cada valor también tiene un índice único. Es esencialmente una columna. Para crear una Series utilizamos la instrucción Series junto a los datos, como se muestra a continuación:
import pandas as pd
series = pd.Series({"Argentina":"Buenos Aires", "Chile":"Santiago de Chile", "Colombia":"Bogotá", "Perú":"Lima"})
print('Series:')
print(series)
Acá creamos una Serie con Pandas con 4 números.
Ten en cuenta que el índice de los DataFrame como de las Series, contienen las claves del diccionario original y están ordenas, por lo que el primer índice siempre será 0. Por ejemplo, Argentina será el índice en 0, mientras que Perú será el índice en 3.
Por su parte, los DataFrames de Pandas son estructuras de datos de dos o más dimensiones, básicamente una tabla con filas y columnas. Las columnas tienen nombres y las filas tienen índices. Para crear un DataFrame utilizamos la instrucción con el mismo nombre junto al conjunto de datos, como se muestra a continuación:
import pandas as pd
df = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6]]))
print('DataFrame:')
print(df)
Los DataFrames y las Series son bastante similares en cuanto a que muchas operaciones que se pueden hacer con uno se pueden hacer con el otro, como rellenar valores nulos y calcular la media.
Ahora que no tienes dudas de qué se trata Pandas y sus DataFrame, qué pueden hacer y cómo se diferencia de otras estructuras, es hora de empezar a utilizarlos.
Importar y Exportar datos de un archivo
Visto todos los pasos anteriores, que son básicos en el manejo de datos con Pandas, veamos cómo podemos implementar esta librería específicamente para Machine Learning, comenzando por el primer paso que es el de importar los datos.
Generalmente para obtener los datos de Machine Learning lo vas a hacer de alguna de las siguientes formas:
- Abrir un archivo local, generalmente un archivo CSV, pero también podría ser un archivo de texto delimitado, excel, entre otros.
- Abrir un archivo o base de datos de manera remota desde un sitio web a través de una URL.
Para cumplir con estas acciones hay diferentes comandos para cada una de ellas, pero cuando se abre un archivo se verá de la siguiente manera:
pd.read_tipoarchivo()
Hay diferentes tipos de archivos con los que puede trabajar Pandas, por lo que se debe reemplazar “tipoarchivo” con el tipo de archivo real, por ejemplo CSV. Adicionalmente se debe indicar la ruta o el nombre del archivo dentro del paréntesis. Dentro del paréntesis también se puede pasar diferentes argumentos relacionados con la forma de abrir el archivo, para conocerlos es recomendable leer la documentación.
Veamos este procedimiento en un ejemplo, vamos a leer un archivo CSV que tenemos guardado en nuestro computador llamado “train.csv”.
import pandas as pd
df = pd.read_csv('train.csv')
Ahora bien, después que hemos realizado varias modificaciones a nuestros datos queremos guardarlos en un nuevo archivo, de igual forma podemos utilizar la librería de Pandas, solamente debemos especificar el tipo de archivo en donde se guardará y la ruta y el nombre en donde estará ubicado en nuestro computador.
pd.to_tipoarchivo(nombrearchivo)
Inspeccionar DataFrame de Pandas
Los DataFrame pueden ser explorados con varias instrucciones con las que Pandas cuenta, veamos algunas de ellas.
Comencemos conociendo la forma de los datos, para ello utilizamos la instrucción shape, con esta instrucción puedes conocer las dimensiones del DataFrame.
import pandas as pd
datos = [ [3, 2, 0, 1], [0, 3, 7, 2] ]
df = pd.DataFrame(datos)
df.shape
import pandas as pd
datos = [ [3, 2, 0, 1], [0, 3, 7, 2] ]
df = pd.DataFrame(datos)
len(df.index)
Conociendo las estadísticas del DataFrame
Un comando muy útil es describe() que muestra estadísticas de resumen para columnas numéricas.
import pandas as pd
datos = [ [3, 2, 0, 1], [0, 3, 7, 2] ]
df = pd.DataFrame(datos)
df.describe()
import pandas as pd
datos = [ [3, 2, 0, 1], [0, 3, 7, 2] ]
df = pd.DataFrame(datos)
df.mean()
import pandas as pd
datos = [ [3, 2, 0, 1], [0, 3, 7, 2] ]
df = pd.DataFrame(datos)
df.corr()
import pandas as pd
datos = [ [3, 2, 0, 1], [0, 3, 7, 2] ]
df = pd.DataFrame(datos)
df.count()
import pandas as pd
datos = [ [3, 2, 0, 1], [0, 3, 7, 2] ]
df = pd.DataFrame(datos)
df.median()
import pandas as pd
datos = [ [3, 2, 0, 1], [0, 3, 7, 2] ]
df = pd.DataFrame(datos)
df.std()
Manipulación de DataFrames
Una de las cosas que es mucho más fácil en Pandas es seleccionar los datos que deseas, esto si lo comparamos con seleccionar un valor de una lista o un diccionario. Puedes seleccionar una columna de manera muy fácil, solamente deberás indicar el índice de la misma.
import pandas as pd
datos = [ [3, 2, 0, 1], [0, 3, 7, 2] ]
df = pd.DataFrame(datos)
df[1]
import pandas as pd
datos = [ [3, 2, 0, 1], [0, 3, 7, 2] ]
df = pd.DataFrame(datos)
df[[0, 1]]
import pandas as pd
datos = [ [3, 2, 0, 1], [0, 3, 7, 2] ]
df = pd.DataFrame(datos)
df.iloc[0][3]
import pandas as pd
datos = [ [3, 2, 0, 1], [0, 3, 7, 2] ]
df = pd.DataFrame(datos)
df.loc[0]
import pandas as pd
datos = [ [3, 2, 0, 1], [0, 3, 7, 2] ]
df = pd.DataFrame(datos)
df.iloc[0,:]
Limpieza de datos
Otro procedimiento que podemos hacer con Pandas es limpiar nuestros datos, estos es muy importante en Machine Learning si queremos obtener resultados confiables.
Con Pandas podemos verificar si faltan valores en el conjunto de datos solamente tenemos que implementar pd.isnull(). Implementando esta instrucción nos devuelve una matriz booleana, una matriz de verdadero para valores faltantes y falso para valores no perdidos.
#Verificar si hay datos nulos en el DataFrame
print('Datos nulos en el DataFrame:')
print(df.isnull())
#Suma de datos nulos en el DataFrame
print('Suma datos nulos en el DataFrame:')
print(df.isnull().sum())
Después de obtener una lista de valores perdidos, nos podemos deshacerse de ellos usando df.dropna() para eliminar las filas o df.dropna(axis = 1) para eliminar las columnas en donde haya datos perdidos.
En caso de que no queramos eliminar datos también podemos rellenar los valores perdidos con otros valores usando df.fillna(x) que reemplaza los valores perdidos con x, puede ser cualquier valor, inclusive se puede reemplazar todos los valores nulos con la media de los datos.
#Reemplaza los valores perdidos por la media
print('Reemplazar los valores perdidos por la media:')
print(df.fillna(df.mean ()))
Estas es solo una visión general de las funciones básicas que ofrece la librería de Pandas. En los últimos años Pandas ha ganado una enorme popularidad y se considera una de las principales librerías de Python que hay que utilizar.
Hola ligdi he visto tus cursos y me parece genial que nos brindes esta informacion tan bien explicada y en español, realmente una gran ayuda para los que estudiamos lo relacionado a
machine learning y data science
me gustaria que nos enseñaras algo sobre redes neuronales, especificamente las redes recurrentes, pues he visto que no hay mucha informacion al respecto en internet… al menos en español seria de gran ayuda pues tras ver el tema a profundidad nos encontramos con este pequeño freno (NO HAY CASI INFORMACION CLARA SOBRE REDES RECURRENTES) realmente me gustaria que nos ayudaras en ese tema, gracias
Hola Abraham, si tengo pensado tocar las redes neuronales y obviamente las redes recurrentes, no te preocupes. Saludos.