HOWTO · Pandas

Determine la longitud de la lista en el marco de datos de Python Pandas

En este artículo, explicamos cómo contar los elementos de cada lista de una columna de un DataFrame de Pandas. Aplica la función integrada `len()` a cada lista mediante `Series.map()` o `Series.apply()` y asigna los recuentos a una nueva columna.

En esta página

La función integrada len() de Python cuenta los elementos de cada lista almacenada en una columna de un DataFrame. Aplícala a la Series de esa columna con map() o apply() para obtener un recuento por fila y asignar esos recuentos a una nueva columna. Así se mide el contenido de las listas, no el número de filas ni de columnas del DataFrame.

Crear un DataFrame con una columna que contiene listas

Un DataFrame puede contener listas de Python en sus celdas. Por ejemplo, una columna Lists podría incluir [1, 2, 3], [4, 5] y [6]. Cada fila conserva su propia lista, por lo que su recuento depende del valor que contiene. En el ejemplo siguiente, la columna se llama Lists y la columna de resultados, Length; sustituye cualquiera de esos nombres para adaptarlo a tu DataFrame.

Calcular la longitud de las listas con Series.map(len)

Llama a map(len) en la Series seleccionada de la columna que contiene las listas y asigna la Series resultante al DataFrame. map() aplica la función indicada a cada valor, de modo que el resultado contiene un recuento en el índice correspondiente a cada fila.

Ejecuta este ejemplo:

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

import pandas as pd

df = pd.DataFrame({"Lists": [[1, 2, 3], [4, 5], [6], [7, 8, 9, 10]]})
df["Length"] = df["Lists"].map(len)
print(df)
           Lists  Length
0      [1, 2, 3]       3
1         [4, 5]       2
2            [6]       1
3  [7, 8, 9, 10]       4

Los valores de Length corresponden al número de elementos de cada lista: 3, 2, 1 y 4. Para adaptar esta operación, selecciona tu columna de listas en lugar de Lists y elige el nombre que quieras para la columna de resultados en lugar de Length. La asignación alinea los valores calculados con el índice de la Series. En el código y la salida, las etiquetas Lists y Length se mantienen en inglés.

Usar Series.apply(len) como alternativa

Para esta misma operación sobre una Series, apply() también puede llamar a la función integrada para cada lista. Con el DataFrame del ejemplo anterior, la asignación equivalente es df["Length"] = df["Lists"].apply(len). Para estos valores, produce los mismos recuentos. Elige la forma que mejor encaje con el código que la rodea; aquí no se afirma que una sea más rápida. Series.map() es específicamente una operación para aplicar una función a los valores de una Series, mientras que apply() también está disponible en DataFrames y tiene un comportamiento basado en el eje. Ten en cuenta sobre qué objeto llamas al método.

Gestionar valores vacíos y valores que no son listas

Una lista vacía tiene longitud cero, por lo que len([]) devuelve 0. Ese valor es válido para la misma operación de mapeo. Sin embargo, no se puede aplicar len() indiscriminadamente si la columna también contiene None, NaN o valores escalares, como números enteros. Esos valores no tienen una longitud de lista, y una llamada directa puede generar un TypeError. Decide cómo representar esos valores antes de contar.

Si todos los valores que no son listas deben contar como cero, usa df["Lists"].map(lambda value: len(value) if isinstance(value, list) else 0). La expresión devuelve la longitud de cada lista y asigna cero a todos los valores que no sean listas; no los convierte en listas vacías. Aplica esta regla solo si cero es el recuento que quieres para todos esos valores. Si también se permiten otros tipos iterables, como tuplas o cadenas, define y comprueba explícitamente los tipos aceptados; len() también cuenta sus elementos o caracteres. Mantén una política de entrada coherente con el significado de la columna Length.