En este artículo voy a tratar sobre la herramienta para el procesamiento de datos llamada Pandas.
Si aún no tienes configurado el entorno para la visualización de datos, consulta el siguiente artículo.
1. ¿Qué es Pandas?
Pandas es una librería para la manipulación y el análisis de datos.
Permite convertir listas o diccionarios en tablas para su procesamiento.

Por ejemplo, supongamos que tenemos una lista que contiene 3 listas en su interior como la que se muestra a continuación.
lstInLst = [[1,2,3],[4,5,6],[7,8,9]]Si cambiamos únicamente la forma de representar estos datos, adoptan la siguiente forma. A simple vista parece una tabla.
lstInLst = [[1,2,3],
[4,5,6],
[7,8,9]]Ahora, si convertimos estos datos a Pandas...
import pandas as pd
df = pd.DataFrame(lstInLst)
print(df)Se transforman en una tabla como la de abajo.
A este tipo de datos de Pandas se le llama DataFrame.

Ahora estos datos se pueden procesar por filas o por columnas.
Si te cuesta entenderlo, puedes pensar que es similar a Excel.
Veamos ahora de forma general sus funcionalidades.
2. Uso básico de pandas
Antes he mencionado que Pandas es similar a Excel.
Por lo tanto, las funciones que hay que aprender para usar Pandas son las mismas que se aprenden al usar Excel.
En general, al usar Excel, las funciones más importantes son inspeccionar los datos, ordenarlos, copiar las celdas deseadas, etc.
Concentrémonos en estos aspectos para tener un primer contacto con Pandas.

He dejado los datos como archivo adjunto más abajo. Es un conjunto de datos con aproximadamente 11 filas y 5 columnas. Puedes usarlo o crear tus propios datos, no hay problema.
1) Llamar al módulo y cargar el archivo (read_excel)
Primero, coloca los datos y el archivo de Jupyter Notebook juntos en la ruta del archivo correspondiente.

A continuación, introduce el código siguiente. La explicación del código está en los comentarios.
# importar pandas con el nombre de pd
import pandas as pd
# cargar el Excel llamado workout que está en la misma carpeta y guardarlo en la variable df
df = pd.read_excel("./workout.xlsx")
# llamar a la variable df para comprobarla
dfSi compruebas df, podrás ver que los datos se han cargado como se muestra a continuación.
Normalmente habría que usar print(df), pero en Jupyter Notebook basta con introducir la variable para ver directamente su valor.
Ahora, vamos a masticar, desmenuzar, saborear y disfrutar estos datos.

2) Consulta (head, tail, index, columns)
En este momento, como los datos son pocos, se muestran todos, pero si los datos son muchos, es difícil verlos de una vez.
En ese caso, puedes usar las funciones head, tail y el index para hacerte una idea general de los valores.
(1) head
head imprime los datos de la parte superior.
Si haces clic en [+ Código] en la parte superior, se añadirá una nueva celda de entrada.

Introduce aquí el código siguiente.
# Imprime los datos de la parte superior (por defecto 5 filas)
# df es la variable (objeto) que contiene el DataFrame.
df.head()
# Entre paréntesis se introduce el número de filas que se quiere consultar.
df.head(3)Si aparece una salida como la de abajo, lo has conseguido.
De esta forma puedes consultar una parte de los datos.

(2) tail
tail permite consultar los datos del final.
Por defecto imprime 5, pero si introduces un valor entre paréntesis, imprimirá esa cantidad.
Es lo mismo que head.
# Imprime los datos de la parte inferior
df.tail()
# Entre paréntesis se introduce el número de filas que se quiere consultar.
df.tail(3)Para los principiantes, el valor que se introduce dentro de los paréntesis se llama parámetro.

(3) index
index imprime de forma sencilla el número de datos y su forma.
Es útil cuando quieres comprobar de forma general la cantidad de datos.
df.index
3) Ordenación (sort_values, sort_index, reset_index)
(1) sort_values
sort_values ordena los datos en orden ascendente o descendente.
Si lo escribes de la siguiente forma después de la variable que contiene el objeto, puedes ordenarlos fácilmente.
# nombreVariable.sort_values("nombre de la columna")
df.sort_values("이름")
Si quieres ordenar por 2 o más columnas, introduce los nombres de las columnas en forma de lista dentro de los paréntesis.
# Si la lista que introduces es ["수학", "이름"],
# primero ordena por 이름 y luego por la nota de 수학.
# Cuanto más al frente esté en la lista, mayor prioridad tiene en el orden.
df.sort_values(["수학","이름"])
Por defecto, el orden es ascendente.
Si quieres ordenar en orden descendente, introduce un parámetro más.
# Si ascending es False, se ordena de forma descendente.
# También puedes usar by=[] delante de la lista para expresar con claridad el rol del parámetro.
df.sort_values(["수학","이름"], ascending=False)
df.sort_values(by=["수학","이름"], ascending=False)
Si después de hacer esto compruebas los datos originales, verás que siguen como al principio.
Esto ocurre porque no se ha vuelto a asignar el DataFrame ordenado a df.
Hay dos formas de solucionarlo.
Asignarlo a una nueva variable
Añadir el parámetro inplace = True
Si asignas a una nueva variable, quedará como sigue:

Si añades el parámetro inplace=True, se sobrescribe la variable existente.

(2) sort_index
sort_index, como su nombre indica, ordena según el índice. Introduce el código de la siguiente forma.
# Al asignar a una nueva variable
df3 = df.sort_index()
df3
# Al usar el parámetro inplace
df.sort_index(inplace=True)
dfSi miras la salida, verás que se ha ordenado por índice y ha vuelto al estado original.

(3) reset_index
reset_index vuelve a definir los índices.
Después de ordenar con sort_values y redefinir los índices, introduce el siguiente código.
# Ordenar en orden ascendente según la nota de 지구과학 y guardar en la variable existente
df.sort_values("지구과학", inplace=True)
# Redefinir los índices y eliminar los índices anteriores. Guardar en la variable existente
df.reset_index(drop=True, inplace=True)
# Mostrar
dfComo se ve a continuación, se ha ordenado en orden ascendente según la nota de 지구과학 y luego se han redefinido los índices.
Si quieres conservar los índices anteriores, elimina el parámetro drop.

4) Eliminación (drop, dropna)
(1) drop
Esta función se usa para eliminar las filas o columnas deseadas.
Recibe los índices index y columns como parámetros para eliminar.
Si buscas, verás que se pueden eliminar de varias formas, como usando axis, pero con el uso acabarás usando lo que te resulte más fácil y cómodo.
# drop recibe varios parámetros, pero lo más cómodo es usar index y columns.
# Eliminar la segunda fila
df.drop(index=1, inplace=True)
df
# Eliminar las columnas 수학 y 영어
df.drop(columns=["수학","영어"], inplace=True)
dfPrimero, si eliminamos la fila cuyo índice es 1, la salida será así:

Ahora eliminemos las columnas de 수학 y 영어. Basta con proporcionar el parámetro columns e introducir los valores en forma de lista.

(2) dropna
dropna elimina las filas que no tienen valor.
Normalmente se denomina eliminación de valores faltantes.
Utilizando numpy, he creado temporalmente un valor faltante arbitrario.
No hace falta entender bien el código de abajo.
A grandes rasgos, es un código que convierte en valor faltante el valor de la 4.ª fila y la 3.ª columna.

Si llamas a los datos y aparece NaN, significa que ese valor está ausente. Es la abreviatura de Not a Number.
Ahora eliminemos las filas que no tienen valor.
df.dropna(inplace=True)
df
Puedes comprobar que se ha eliminado "이서", que no tenía nota de 지구과학.
También es posible reemplazar los valores NaN por 0 u otros números.
Ese nivel no lo trataremos aquí.
5) Extracción de filas y columnas (loc, iloc, método sencillo)
Al trabajar con los datos, puedes usar solo las filas o columnas deseadas.
En ese caso se utilizan loc e iloc.
(1) loc
loc es la abreviatura de location.
Después de loc, introduces el rango de filas y columnas como si introdujeras las claves de un diccionario.
# df.loc[rango de índices de fila, rango de índices de columna]
df.loc[0:3,"이름":"국어"]
dfIntroduce los índices y las columnas exactamente con sus nombres.
Actualmente, los índices de las filas son números y los de las columnas están en coreano, así que si lo introduces así, te mostrará ese rango.

Si quieres, por ejemplo, imprimir la columna 이름 y 지구과학 desde la fila cuyo índice es 3, puedes introducirlo de la forma siguiente.
df.loc[3:,["이름","지구과학"]]
dfLos datos continuos se introducen usando dos puntos (:), y los datos no continuos se introducen en forma de lista.

(2) iloc
iloc es la abreviatura de integer location.
Tiene la misma funcionalidad que loc, pero recibe las posiciones de filas y columnas como números.
Por ejemplo, si quieres imprimir, igual que arriba, 이름 y 지구과학 desde la fila cuyo índice es 3, introdúcelo así:
df.iloc[2:,[0,2]]
df
Si te fijas bien, verás que en loc se introdujo 3 como parámetro de fila, mientras que en iloc se introdujo 2 como parámetro de fila.

En loc, se imprimen las filas a partir de aquella cuyo índice es 3, mientras que en iloc, se pasan la fila 0 y la fila 1 y se imprime a partir de la fila 2.
(3) Método sencillo
También puedes consultar los datos simplemente añadiendo corchetes [] como un diccionario después de la variable.
Si quieres ver las filas de la 0 a la 3 y las columnas 이름 y 지구과학, puedes introducir lo siguiente:
# También se pueden consultar los datos simplemente usando [] después de la variable.
df[0:4][["이름","지구과학"]]
df
Ahora probemos a consultar solo 이름.
Como el índice de la columna donde está 이름 es "이름", puedes introducirlo de forma muy simple así:
df["이름"]
Con la práctica te darás cuenta de que este método puede provocar errores cuando intentas modificar los datos.
Por lo tanto, si quieres modificar valores, es recomendable usar loc o iloc.
6) Condicionales
(1) Condicional simple
Las sentencias condicionales buscan los datos que cumplen la condición deseada.
Puedes pensar que es igual que la función de filtro de Excel.
Si quieres, por ejemplo, buscar a los estudiantes que tienen más de 90 puntos en 지구과학, puedes introducir lo siguiente:
df["지구과학"] > 90Si lo introduces así, Pandas recorre todas las celdas de la tabla y devuelve valores True o False según la condición.

Si vuelves a meter esto en un DataFrame, Pandas imprime las filas cuyo valor es True.
# Al usar loc con una condición (recomendado)
df.loc[df["지구과학"]>90]
# Si usas un método un poco más simple
df[df["지구과학"]>90]El resultado no cambia mucho con ningún método, así que usa el que te resulte más cómodo.
Nuestro objetivo no es Pandas en sí.
Primero pruébalo y, si sale un error, no es tarde para cambiar de método.


(2) Condicional múltiple
También es posible introducir varias condiciones.
df.loc[(df["지구과학"]>90) & (df["영어"]>90)]Si quieres buscar los valores que cumplen ambas condiciones, encierra cada condición entre paréntesis y pon el símbolo & entre ellas.
Si escribes and, aparecerá un error.

Si quieres buscar los valores que cumplen al menos una de las dos condiciones, introduce |.
De igual modo, si escribes or, aparecerá un error.
df.loc[(df["지구과학"]>90) | (df["영어"]>90)]
También es posible consultar solo las columnas deseadas entre los valores que cumplen la condición.
df.loc[(df["지구과학"]>90) | (df["영어"]>90), ["이름","영어" "지구과학"]]
7) Otras funciones útiles (columns, unique)
En la visualización de datos, a menudo es necesario indicar en la leyenda a qué tipo de datos pertenece cada valor.
En estos casos puedes usar columns para consultar los índices de las columnas o la función unique para obtener los valores únicos.
(1) columns
Se utiliza para consultar los índices de las columnas de los datos.
df.columnsSi vuelves a cargar los datos y compruebas los índices, verás una salida como la que sigue.

Si, por ejemplo, decides representar en un gráfico las notas de 국어, 수학, 영어 y 지구과학 excluyendo los nombres de los alumnos, podrás definir fácilmente la leyenda sin tener que escribirla a mano.

(2) unique
Esta función elimina los duplicados de los valores de los datos y devuelve solo los valores únicos.
Primero, veamos las notas de 지구과학.

Mostremos los valores únicos de las notas de 지구과학.
df["지구과학"].unique()Si ves la salida de este código, verás que, aunque hay dos estudiantes con 99 puntos, solo aparece una vez.

Como devuelve un array, también puedes extraer los valores secuencialmente para inspeccionarlos.

3. Conclusión
En este artículo hemos visto cómo procesar datos usando Pandas.
Solo hemos tratado contenidos básicos, por lo que puede parecer algo sencillo.
Recuerda que nuestro primer objetivo no es el preprocesamiento de datos, sino visualizar datos estructurados.
En el siguiente artículo voy a resolver algunos ejercicios sencillos de Pandas.
댓글을 불러오는 중...