Curso
En el mundo de la manipulación de datos con pandas, el método .explode() es una herramienta muy útil cuando trabajas con listas dentro de DataFrames. Este tutorial es un manual para dominar .explode(), desde su mecánica básica hasta aplicaciones avanzadas y errores frecuentes.
La respuesta corta: así funciona .explode()
Si buscas una explicación rápida, quédate con esta sección. El método .explode() está pensado para expandir los elementos de una columna con valores tipo lista en varias filas, convirtiendo cada elemento de la lista en una fila independiente. Por ejemplo, usaremos el siguiente DataFrame df para ilustrarlo:
|
ID |
Interests |
|
1 |
['Python', 'Data Science'] |
|
2 |
['Machine Learning', 'AI'] |
El método .explode() expandirá los elementos de la columna Interests, así:
# Explode the Interests column
exploded_df = df.explode('Interests')
|
ID |
Interests |
|
1 |
Python |
|
1 |
Data Science |
|
2 |
Machine Learning |
|
2 |
AI |
¿Qué es el método .explode() de pandas?
El método .explode() simplifica el manejo de datos anidados, como listas o tuplas, dentro de DataFrames de pandas. Al convertir cada elemento de una estructura tipo lista en una fila independiente, .explode() mejora la accesibilidad y la preparación de los datos para su análisis.
¿Cómo funciona el método .explode()?
La funcionalidad de .explode() es potente y directa, pensada para ser fácil de usar y eficiente en tareas de manipulación de datos.
Column: indica la columna con entradas tipo lista que se van a expandir.ignore_index: cuando se establece enTrue, reinicia el índice a un entero por defecto, lo que ayuda a mantener la integridad del DataFrame tras la explosión. Por defecto esFalse.
Dos formas de usar el método .explode() de pandas
Expandir una sola columna en pandas
El caso más común consiste en expandir una sola columna, convirtiendo cada una de sus entradas tipo lista en filas individuales. En la sección de la respuesta corta ya lo vimos. Vamos a retomarlo. Aquí tenemos el DataFrame df, que contiene los IDs de personas y sus intereses de aprendizaje. Como ves, los intereses están en formato lista.
|
ID |
Interests |
|
1 |
['Python', 'Data Science'] |
|
2 |
['Machine Learning', 'AI'] |
El método .explode() expandirá los elementos de la columna Interests en filas individuales así:
# Explode the Interests column
exploded_df = df.explode('Interests')
|
ID |
Interests |
|
1 |
Python |
|
1 |
Data Science |
|
2 |
Machine Learning |
|
2 |
AI |
Este método es especialmente útil para columnas con datos categóricos o con múltiples atributos por observación.
Expandir varias columnas en pandas
También puedes encontrarte con situaciones en las que necesites expandir varias columnas dentro de un DataFrame. Es muy útil cuando trabajas con conjuntos de datos en los que varias columnas contienen estructuras tipo lista que deben desplegarse a la vez. Añadamos una columna adicional Tools a df para ilustrarlo:
|
ID |
Interests |
Tools |
|
1 |
['Python', 'Data Science'] |
['Pandas', 'NumPy'] |
|
2 |
['Machine Learning', 'AI'] |
['Scikit-learn', 'TensorFlow'] |
Para expandir varias columnas, incluye la lista de columnas que quieres explotar:
# Explode the Interests & Tools columns
exploded_df = df.explode(['Interests', 'Tools'])
|
ID |
Interests |
Tools |
|
1 |
Python |
Pandas |
|
1 |
Data Science |
NumPy |
|
2 |
Machine Learning |
Scikit-learn |
|
2 |
AI |
TensorFlow |
Este enfoque es muy práctico cuando trabajas con varias columnas que contienen listas. Dicho esto, hay algunos escollos con .explode() que conviene tener en cuenta y que veremos a continuación.
Errores comunes al usar .explode() en pandas y cómo solucionarlos
Duplicar columnas al expandir
Un error habitual al trabajar con .explode() es expandir por accidente columnas duplicadas al usar el método. Recuerda: ¡asegúrate siempre de que la lista de columnas sea única!
# Incorrecto: se expanden columnas duplicadas
df.explode(['Interests','Tools','Interests'])
# Correcto: se expanden columnas únicas
df.explode(['Interests','Tools'])
Expandir cadenas que parecen listas
A menudo puedes tener filas en tus DataFrames que son cadenas pero parecen listas. Intentar expandir una columna con cadenas que parecen listas, como "['Python', 'AI']", no produce cambios porque el método .explode() espera objetos realmente tipo lista, no strings con ese aspecto. Aquí tienes un ejemplo y su solución. Imagina que df tuviera estos valores:
|
ID |
Interests |
|
1 |
"['Python', 'Data Science']" |
|
2 |
"['Machine Learning', 'AI']" |
Como ves, la columna Interests contiene valores que son cadenas con formato de lista. Usar .explode() sobre Interests no cambiaría nada porque cada valor es una única cadena. Para solucionarlo, convierte los valores de Interests en listas reales.
import ast
df['Interests'] = df['Interests'].apply(ast.literal_eval)
exploded_df = df.explode('Interests')
print(exploded_df) # Esto sí funcionará
Longitudes no coincidentes en múltiples columnas
Al trabajar con DataFrames de pandas, es frecuente encontrarse con filas en las que las estructuras tipo lista en las columnas a expandir tienen longitudes diferentes. Esta discrepancia puede provocar datos desalineados o incompletos tras usar .explode() en varias columnas. Por ejemplo, imagina que df es así:
|
ID |
Interests |
Tools |
|
1 |
['Python', 'Data Science'] |
['Pandas'] |
|
2 |
['Machine Learning'] |
['Scikit-learn', 'TensorFlow'] |
Como ves, las columnas Interests y Tools contienen listas de distinta longitud. Usar .explode() sobre estas columnas tal cual provocará un error, ya que las columnas deben tener el mismo número de valores en las listas. Para solucionarlo, puedes rellenar las listas con None usando una función personalizada, como esta:
# Function to pad lists to the same length
def pad_lists(row):
max_len = max(len(row['Interests']), len(row['Tools']))
row['Interests'] += [None] * (max_len - len(row['Interests']))
row['Tools'] += [None] * (max_len - len(row['Tools']))
return row
# Apply the padding function to each row
df = df.apply(pad_lists, axis=1)
# Now, safely explode both columns
df.explode(['Interests','Tools'])
|
ID |
Interests |
Tools |
|
1 |
Python |
Pandas |
|
1 |
Data Science |
None |
|
2 |
Machine Learning |
Scikit-learn |
|
2 |
None |
TensorFlow |
Para terminar
En resumen, .explode() es muy útil para desplegar los elementos de una lista como filas en un DataFrame de pandas. Si quieres seguir aprendiendo pandas, echa un vistazo a estos recursos:
Adel es educador de Ciencia de Datos, conferenciante y Evangelista en DataCamp, donde ha publicado varios cursos y formación en directo sobre análisis de datos, aprendizaje automático e ingeniería de datos. Le apasiona difundir las habilidades y la alfabetización en materia de datos en las organizaciones y en la intersección entre tecnología y sociedad. Tiene un máster en Ciencia de Datos y Análisis Empresarial. En su tiempo libre, puedes encontrarle pasando el rato con su gato Louis.


