¿Qué debo hacer si esta API no se puede implementar debido a la versión anterior de Pandas?

Este artículo ha participado en el evento "Ceremonia de creación de recién llegados" para comenzar juntos el camino de la creación de oro.

Introducción: publiqué un tweet hace unos días , compartiendo una API muy útil en Pandas-explotar, pero hoy sucedió otra escena dramática: debido a que la versión de Pandas es demasiado baja, el sistema indica que el objeto 'Serie' no tiene atributo 'explotar' ! Bueno, las cosas buenas siempre son delicadas, y no se espera que este principio se aplique en el código. Entonces, hoy, ampliaré el análisis sobre este tema y luego mostraré un poco de productos secos de Pandas...

imagen

Descripción del problema : una estructura de datos de marco de datos de pandas tiene una columna que es un tipo de colección (es decir, contiene varios subelementos), y cada subelemento debe expandirse en una fila. Usar la API de explosión en pandas para este escenario será muy fácil de usar, simple y eficiente. Sin embargo, dado que la versión de pandas para la implementación en línea es la 0.23 y la API de explosión se introdujo en versiones posteriores a la 0.25, no se puede usar. Para resolver este problema, el uso flexible de apply+stack puede resolver este problema.

imagen

La función de explosión se agregó en la versión 0.25 y se agregó ignore_index en la versión 1.1

Dado que explotar no se puede usar directamente, debe probar otros métodos para lograr el mismo efecto. Aquí primero da el efecto objetivo después de ejecutar explotar:

imagen

Observar el efecto de destino después de la ejecución de explotar, de hecho, tiene el sabor del problema clásico en SQL-column-to-row. Es decir, la columna B en realidad se puede considerar como el efecto de agregación de múltiples columnas, y luego la columna a fila se puede realizar sobre la base de múltiples columnas. Con base en esta idea, el problema se puede descomponer en dos subproblemas:

  • Una sola columna que contiene elementos de lista se divide en varias columnas

  • Convertir varias columnas en varias filas

Estos dos subproblemas son en realidad relativamente simples en la rica API de pandas.Por ejemplo, una sola columna se divide en varias columnas, por lo que, de hecho, el desmontaje se puede completar directamente con pd.Series, como se muestra en la siguiente figura. Uno de los trucos utilizados es: para retener otra información de la columna, primero se puede colocar en el índice y luego se puede restablecer el índice al final.

imagen

Hasta ahora, la conversión de una sola columna a varias columnas se completó. Dado que cada columna contiene una cantidad diferente de elementos, la longitud después de la expansión no es consistente. Pandas conservará la longitud más larga y completará el resto con valores nulos ( valores positivos) Debido a la existencia de valores nulos, el tipo entero original se cambia automáticamente a un tipo decimal). Vale la pena mencionar que el valor nulo aquí será muy útil en el procesamiento posterior.

Después de completar la expansión de varias columnas, lo siguiente que debe hacer es convertir las columnas en filas, es decir, convertir la información de varias columnas para que se muestre fila por fila. Este es un problema muy clásico en SQL, y naturalmente se considera en pandas, por lo que es necesario obtener la segunda API: stack! El significado original de stack es stack. Ponerlo en pandas significa apilar elementos, convertir una mesa ancha en una mesa larga. Mire el comentario oficial de stack, que es convertir un DataFram en una serie de índices de varios niveles, en los que las columnas originales se convierten en el índice de segundo nivel.

imagen

bien, entonces es previsible que la ejecución de la pila sobre la base del DataFrame de varias columnas que se acaba de obtener se dé cuenta del efecto del apilamiento de columna a fila y obtenga una Serie. En concreto, los resultados son los siguientes:

imagen

Al mismo tiempo, también encontramos que no solo se realiza la compresión de la columna, sino que también se filtra la columna de valor nulo NaN original, lo cual es una ganancia inesperada. En realidad, esto no es sorprendente, porque stack establece un parámetro predeterminado dropna=True. Hasta ahora, la función predeterminada se ha realizado básicamente, y el resto solo necesita restablecer el índice de doble capa a la columna de datos. Por supuesto, se agregarán dos columnas de datos después del restablecimiento aquí. Además de la columna requerida originalmente, la otra columna es redundante. Solo necesita eliminarse. Por supuesto, el nombre de la columna debe cambiarse. El código completo es el siguiente:

imagen

Aunque la implementación anterior no es tan elegante como una explosión directa, logra el mismo efecto, y en realidad tiene una mayor sensación de logro, ¿no es así?

Supongo que te gusta

Origin juejin.im/post/7100945145477988382
Recomendado
Clasificación