Transformación de datos maestros en Pandas con estas tres técnicas útiles

Una inmersión en el filtrado, la manipulación y el funcionamiento.

Foto por milad fakurian on Unsplash

Piense en la última vez que trabajó con un conjunto de datos bien formateado. Columnas bien nombradas, valores faltantes mínimos y organización adecuada. Es una sensación agradable, casi liberadora, ser bendecida con datos que no es necesario limpiar ni transformar.

Bueno, es agradable hasta que sales de tu ensoñación y continúas jugueteando con el caos desesperado de filas rotas y etiquetas sin sentido que tienes delante.

No existen datos limpios (en su forma original). Si eres un científico de datos, lo sabes. Si estás empezando, deberías aceptar esto. Necesitará transformar sus datos para poder trabajar con ellos de manera efectiva.

Hablemos de tres formas de hacerlo.

Filtrado, pero explicado correctamente

Hablemos de filtrado, pero un poco más profundamente de lo que estás acostumbrado a hacer. Como una de las operaciones de transformación de datos más comunes y útiles, el filtrado eficaz es una habilidad imprescindible para cualquier científico de datos. Si conoces Pandas, probablemente sea una de las primeras operaciones que aprendiste a realizar.

Repasemos, usando mi ejemplo favorito, extrañamente versátil: un DataFrame de calificaciones de estudiantes, acertadamente llamado grades:

Imagen del autor

Vamos a filtrar cualquier puntaje por debajo de 90, porque en este día hemos decidido ser educadores mal capacitados que solo atienden a los mejores estudiantes (por favor, nunca hagas esto). La línea de código estándar para lograr esto es la siguiente:

calificaciones[calificaciones['Puntuación'] >= 90]
Imagen del autor

Eso nos deja con Jack y Hermione. Fresco. ¿Pero qué pasó exactamente aquí? ¿Por qué ¿Funciona la línea de código anterior? Profundicemos un poco más al observar el resultado de la expresión dentro de los corchetes exteriores de arriba:

calificaciones['Puntuación'] >= 90
Imagen del autor

Ah bien. Eso tiene sentido. Parece que esta línea de código devuelve un objeto de la serie Pandas que contiene valores booleanos ( True / False ) valores determinados por lo que >= 90 devuelto para cada fila individual. Este es el paso intermedio clave. Luego, es esta Serie de booleanos la que pasa a los corchetes externos y filtra todas las filas en consecuencia.

Para finalizar, también mencionaré que se puede lograr el mismo comportamiento usando el loc palabra clave:

calificaciones.loc[calificaciones['Puntuación'] >= 90]
Imagen del autor

Hay una serie de razones por las que podríamos optar por utilizar loc (una de las cuales es que en realidad nos permite filtrar filas y columnas a través de una sola operación), pero eso abre una Caja de Pandora de operaciones Pandas que es mejor dejar para otro artículo.

Por ahora, el objetivo de aprendizaje importante es este: cuando filtramos en Pandas, la sintaxis confusa no es una especie de magia extraña. Simplemente necesitamos dividirlo en los dos pasos que lo componen: 1) obtener una serie booleana de las filas que satisfacen nuestra condición y 2) usar la serie para filtrar todo el marco de datos.

¿Por qué es esto útil?, te preguntarás. Bueno, en términos generales, es probable que se produzcan errores confusos si simplemente utilizas operaciones sin entender cómo funcionan realmente. El filtrado es una operación útil e increíblemente común y ahora sabes cómo funciona.

Vamonos.

La belleza de las funciones Lambda

A veces, sus datos requieren transformaciones que simplemente no están integradas en la funcionalidad de Pandas. Por más que lo intentes, ninguna cantidad de búsqueda en Stack Overflow o exploración diligente de la documentación de Pandas revela una solución a tu problema.

Ingrese a las funciones lambda: una característica de lenguaje útil que se integra perfectamente con Pandas.

Como repaso rápido, así es como funcionan las lambdas:

>>> agregar_función = lambda x, y: x + y
>>> agregar_función(2, 3)
5

Las funciones Lambda no son diferentes de las funciones regulares, excepto que tienen una sintaxis más concisa:

  • Nombre de la función a la izquierda del signo igual
  • El lambda palabra clave a la derecha del signo igual (de manera similar a la def palabra clave en una definición de función tradicional de Python, esto le permite a Python saber que estamos definiendo una función).
  • Parámetro(s) después del lambda palabra clave, a la izquierda de los dos puntos.
  • Valor de retorno a la derecha de los dos puntos.

Ahora bien, apliquemos las funciones lambda a una situación realista.

Los conjuntos de datos suelen tener sus propias peculiaridades de formato, específicas de las variaciones en la entrada y recopilación de datos. Como resultado, los datos con los que está trabajando pueden tener problemas extrañamente específicos que deba abordar. Por ejemplo, considere el conjunto de datos simple que aparece a continuación, que almacena los nombres de las personas y sus ingresos. llamémoslo monies.

Imagen del autor

Ahora, como Altezas de los Datos Maestros de esta compañía, se nos ha dado información ultrasecreta: todos en esta compañía recibirán un aumento del 10% más $1000 adicionales. Probablemente este sea un cálculo demasiado específico para encontrar un método específico, pero es bastante sencillo con una función lambda:

actualización_ingreso = lambda núm: núm + (núm * .10) + 1000

Entonces, todo lo que tenemos que hacer es usar esta función con Pandas apply función, que nos permite aplicar una función a cada elemento de la Serie seleccionada:

dinero['Nuevos Ingresos'] = dinero['Ingresos'].apply(update_ Income)
dinero
Imagen del autor

¡Y hemos terminado! Un nuevo y brillante DataFrame que consta exactamente de la información que necesitábamos, todo en dos líneas de código. Para hacerlo aún más conciso, incluso podríamos haber definido la función lambda dentro de apply directamente: un consejo interesante que vale la pena tener en cuenta.

Mantendré el punto aquí simple.

Las lambdas son extremadamente útiles y, por lo tanto, debes usarlas. ¡Disfrutar!

Funciones de manipulación de cadenas en serie

En la sección anterior, hablamos sobre la versatilidad de las funciones lambda y todas las cosas interesantes que pueden ayudarle a lograr con sus datos. Esto es excelente, pero debes tener cuidado de no dejarte llevar. Es increíblemente común quedar tan atrapado en una forma familiar de hacer las cosas que se pierden atajos más simples con los que Python ha bendecido a los programadores. Por supuesto, esto se aplica a más que solo lambdas, pero nos limitaremos a eso por el momento.

Por ejemplo, digamos que tenemos el siguiente DataFrame llamado names que almacena los nombres y apellidos de las personas:

Imagen del autor

Ahora, debido a limitaciones de espacio en nuestra base de datos, decidimos que en lugar de almacenar el apellido completo de una persona, es más eficiente simplemente almacenar su última inicial. Por lo tanto, necesitamos transformar la 'Last Name' columna en consecuencia. Con lambdas, nuestro intento de hacerlo podría verse así:

nombres['Apellido'] = nombres['Apellido'].apply(lambda s: s[:1])
nombres
Imagen del autor

Esto claramente funciona, pero es un poco torpe y, por lo tanto, no es tan pitónico como podría ser. Afortunadamente, con la belleza de las funciones de manipulación de cadenas en Pandas, existe otra forma más elegante (para el propósito de la siguiente línea de código, siga adelante y suponga que aún no hemos alterado la 'Last Name' columna con el código anterior):

nombres['Apellido'] = nombres['Apellido'].str[:1]
nombres
Imagen del autor

¡Ta-da! El .str La propiedad de una serie Pandas nos permite unir cada cadena de la serie con una operación de cadena específica, como si estuviéramos trabajando con cada cadena individualmente.

Pero espera, se pone mejor. Desde .str efectivamente nos permite acceder a la funcionalidad normal de una cadena a través de la Serie, ¡también podemos aplicar una variedad de funciones de cadena para ayudar a procesar nuestros datos rápidamente! Por ejemplo, digamos que decidimos convertir ambas columnas a minúsculas. El siguiente código hace el trabajo:

nombres['Nombre'] = nombres['Nombre'].str.lower()
nombres['Apellido'] = nombres['Apellido'].str.lower()
nombres
Imagen del autor

Mucho más sencillo que pasar por la molestia de definir sus propias funciones lambda y llamar a las funciones de cadena dentro de ellas. No es que no me gusten las lambdas, pero todo tiene su lugar y la simplicidad siempre debe tener prioridad en Python.

Sólo he cubierto algunos ejemplos aquí, pero una gran colección de funciones de cadena está a su disposición [1].

Úselos generosamente. Son excelentes.

Pensamientos finales y resumen

Aquí tienes una pequeña hoja de referencia sobre transformación de datos:

  1. Filtra como lo dices en serio. Aprenda lo que realmente está pasando para saber lo que está haciendo.
  2. Amo tus lambdas. Pueden ayudarle a manipular datos de formas sorprendentes.
  3. A los pandas les encantan las cuerdas tanto como a ti. Hay muchas funciones integradas; también puedes usarlas.

Aquí hay un último consejo: no existe una forma "correcta" de filtrar un conjunto de datos. Depende de los datos disponibles y del problema único que desee resolver. Sin embargo, si bien no existe un método establecido que puedas seguir cada vez, existe una colección útil de herramientas que vale la pena tener a tu disposición. En este artículo, hablé de tres de ellos.

Te animo a que salgas y encuentres algunos más.

Referencias

[1] https://www.aboutdatablog.com/post/10-most-useful-string-functions-in-pandas

Transformación de datos maestros en Pandas con estas tres técnicas útiles Republicado desde la fuente https://towardsdatascience.com/master-data-transformation-in-pandas-with-these-tres-useful-techniques-20699f03e51d?source=rss—-7f60cf5620c9— 4 a través de https://towardsdatascience.com/feed

<!–

->

Sello de tiempo:

Mas de Consultores Blockchain