Explotar varias columnas en Pandas

Olorunfemi Akinlua 21 junio 2023
  1. Use la función explotar () para explotar varias columnas en Pandas
  2. Use Series.explode para explotar múltiples columnas en Pandas
Explotar varias columnas en Pandas

Los datos a los que tenemos acceso pueden contener diferentes tipos de datos, desde cadenas hasta matrices o listas. Por lo general, preferimos números (enteros y flotantes) y cadenas, ya que son más fáciles de manipular.

Si tenemos una lista dentro de las celdas de nuestro marco de datos, ¿cómo trabajamos con ellas? Podemos usar la función explotar() con la biblioteca de Pandas, que se explicará en este tema.

Use la función explotar () para explotar varias columnas en Pandas

Con la función explotar (), las celdas del marco de datos con elementos de lista se transforman en filas mientras se replican los valores del índice y se devuelve un marco de datos con las listas expandidas. Antes de usar la función explotar(), creemos un marco de datos que contenga elementos de lista.

Ejemplo de código:

import pandas as pd
import numpy as np

df = pd.DataFrame(
    {
        "A": ["1", "2", "3", "4"],
        "B": [["11", "12"], ["13", "14"], ["15", "16"], ["17", "18"]],
        "C": [["31", "32"], ["33", "43"], ["56", "67"], ["78", "87"]],
        "D": [["41", "42"], ["34", "47"], ["55", "66"], ["77", "88"]],
        "E": [["51", "52"], ["35", "45"], ["56", "76"], ["97", "68"]],
    }
)

print(df)

Producción :

    A         B         C         D         E
0  1  [11, 12]  [31, 32]  [41, 42]  [51, 52]
1  2  [13, 14]  [33, 43]  [34, 47]  [35, 45]
2  3  [15, 16]  [56, 67]  [55, 66]  [56, 76]
3  4  [17, 18]  [78, 87]  [77, 88]  [97, 68]

Para explotar el Dataframe, debemos pasar la columna que necesitamos explotar. Podemos explotar varias columnas, pero comencemos con una columna: B.

print(df.explode("B"))

Producción :

    A   B         C         D         E
0  1  11  [31, 32]  [41, 42]  [51, 52]
0  1  12  [31, 32]  [41, 42]  [51, 52]
1  2  13  [33, 43]  [34, 47]  [35, 45]
1  2  14  [33, 43]  [34, 47]  [35, 45]
2  3  15  [56, 67]  [55, 66]  [56, 76]
2  3  16  [56, 67]  [55, 66]  [56, 76]
3  4  17  [78, 87]  [77, 88]  [97, 68]
3  4  18  [78, 87]  [77, 88]  [97, 68]

Como puede ver, replica los índices y separa los elementos de la lista para tener su celda. Si no queremos usar los índices originales, podemos reemplazarlos con nuevos índices usando el parámetro ignore_index.

Al establecerlo en True, reemplazamos los índices originales por otros nuevos.

    A   B         C         D         E
0  1  11  [31, 32]  [41, 42]  [51, 52]
1  1  12  [31, 32]  [41, 42]  [51, 52]
2  2  13  [33, 43]  [34, 47]  [35, 45]
3  2  14  [33, 43]  [34, 47]  [35, 45]
4  3  15  [56, 67]  [55, 66]  [56, 76]
5  3  16  [56, 67]  [55, 66]  [56, 76]
6  4  17  [78, 87]  [77, 88]  [97, 68]
7  4  18  [78, 87]  [77, 88]  [97, 68]

También podemos explotar el marco de datos en función de varias columnas.

print(df.explode(["B", "C", "D", "E"], ignore_index=True))

Producción :

    A   B   C   D   E
0  1  11  31  41  51
1  1  12  32  42  52
2  2  13  33  34  35
3  2  14  43  47  45
4  3  15  56  55  56
5  3  16  67  66  76
6  4  17  78  77  97
7  4  18  87  88  68

Use Series.explode para explotar múltiples columnas en Pandas

La función Series.explode hace lo mismo que la función pandas explode(), y podemos hacer uso de la función apply() junto con la función para explotar todo el marco de datos. Podemos establecer el índice en función de una columna y aplicar la función explotar (), luego restablecer el índice usando la función reset_index().

print(df.set_index(["A"]).apply(pd.Series.explode).reset_index())

Producción :

    A   B   C   D   E
0  1  11  31  41  51
1  1  12  32  42  52
2  2  13  33  34  35
3  2  14  43  47  45
4  3  15  56  55  56
5  3  16  67  66  76
6  4  17  78  77  97
7  4  18  87  88  68
Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.

LinkedIn

Artículo relacionado - Pandas Column