HOWTO · Pandas
Python Series map
Este tutorial explica cómo podemos reemplazar valores de una Serie de Pandas con otro valor utilizando el método Series.map().
En esta página
Series.map() transforma cada valor de una Series de pandas y devuelve una nueva Series. El objeto devuelto conserva el índice de entrada, por lo que el mapeo cambia los valores, no las etiquetas del índice. Puedes usarlo con una función, una búsqueda similar a la de un diccionario o con otra Series; consulta la referencia de Series.map() para ver todos los detalles de la API.
Cómo Series.map() transforma los valores
El argumento determina cómo se transforma cada valor de entrada. Una función recibe cada valor; un diccionario usa los valores de entrada como claves; y una Series de mapeo usa su índice como claves de búsqueda y sus valores como reemplazos. El resultado conserva el índice de la Series que se está mapeando, incluso si una búsqueda produce un valor ausente. Así, los valores mapeados permanecen alineados con las filas originales. La llamada no modifica la Series de entrada; guarda el valor devuelto o asígnalo donde necesites los datos transformados. El tipo de datos del resultado depende de los valores mapeados, por lo que una búsqueda que introduce valores ausentes o devuelve cadenas puede producir un tipo distinto al de la entrada.
Elige una función de mapeo, un diccionario o una Series
Usa una función para aplicar una regla, un diccionario para una tabla de búsqueda fija o una Series si la tabla de mapeo ya está almacenada como datos etiquetados. Las claves del diccionario que no tienen una entrada correspondiente producen un valor ausente. Si usas una Series como mapeo, la búsqueda se hace en su índice, no en sus valores.
Gestiona los valores ausentes con na_action
De forma predeterminada, una función también se aplica a los valores ausentes, lo que puede ser inadecuado para operaciones como llamar a .upper(). Establece na_action="ignore" para dejar intacto un valor de entrada ausente mientras se mapean los demás. Esta opción no elimina las filas con valores ausentes. Si un valor no tiene correspondencia en el diccionario o en la Series de mapeo, también se convierte en un valor ausente, aunque el valor de entrada sí estuviera presente.
Mapea una columna de DataFrame
Al seleccionar una columna de un DataFrame, se obtiene una Series; puedes llamar a map() sobre esa columna y volver a asignar la Series devuelta. Las demás columnas permanecen igual. Como la asignación alinea los datos por índice, la Series devuelta conserva las etiquetas de fila de la columna seleccionada.
Ejecuta y verifica los ejemplos
Instala pandas en tu entorno de Python antes de ejecutar este ejemplo autocontenido. Imprime el resultado de cada mapeo para que puedas inspeccionar localmente los valores y los índices. A continuación se muestra el resultado capturado para este código. Las etiquetas del ejemplo y del resultado permanecen en inglés porque los bloques se conservan sin cambios.
Ejecuta este ejemplo:
import pandas as pd
scores = pd.Series([85, 87, 90], index=["a", "b", "c"])
print("Callable:")
print(scores.map(lambda value: value + 5))
labels = {85: "pass", 90: "excellent"}
print("Dictionary:")
print(scores.map(labels))
label_table = pd.Series({85: "pass", 87: "review", 90: "excellent"})
print("Series lookup:")
print(scores.map(label_table))
names = pd.Series(["ada", pd.NA, "lin"])
print("Ignore missing values:")
print(names.map(lambda value: value.upper(), na_action="ignore"))
table = pd.DataFrame({"score": [85, 90], "student": ["Ada", "Lin"]}, index=["a", "b"])
table["grade"] = table["score"].map({85: "pass", 90: "excellent"})
print("Mapped DataFrame column:")
print(table)
Callable:
a 90
b 92
c 95
dtype: int64
Dictionary:
a pass
b NaN
c excellent
dtype: str
Series lookup:
a pass
b review
c excellent
dtype: str
Ignore missing values:
0 ADA
1 NaN
2 LIN
dtype: str
Mapped DataFrame column:
score student grade
a 85 Ada pass
b 90 Lin excellent