Función Pandas Series Series.map()

Minahil Noor 30 enero 2023
  1. La sintaxis de pandas.Series.map()
  2. Códigos de ejemplo: Series.map()
  3. Códigos de ejemplo: Series.map() para pasar un diccionario como parámetro arg
  4. Códigos de ejemplo: Series.map() para pasar una función como parámetro arg
  5. Códigos de ejemplo: Series.map() para aplicarla en un DataFrame
Función Pandas Series Series.map()

La función Python Pandas Series.map() sustituye los valores de una Series. Los valores sustituidos pueden derivarse de una Series, un diccionario o una función. Esta función funciona sólo para una Series. Si aplicamos esta función a un DataFrame entonces generará un AttributeError.

La sintaxis de pandas.Series.map()

Series.map(arg, na_action=None)

Parámetros

arg Es una función, un diccionario, o una Series. Los valores a sustituir se derivan de esta función, diccionario o Series.
na_action Este parámetro acepta dos valores: None e ignore. Su valor por defecto es None. Si su valor es “ignorar”, entonces no asigna los valores derivados a los valores de NaN. Ignora los valores NaN.

Retorna

Devuelve una Series con el mismo índice que la persona que llama.

Códigos de ejemplo: Series.map()

Generaremos una Series que contiene los valores NaN para comprobar la salida después de pasar el parámetro na_action.

import pandas as pd
import numpy as np

series = pd.Series(['Rose', 
                    'Lili', 
                    'Tulip', 
                    np.NaN, 
                    'Orchid', 
                    'Hibiscus', 
                    'Jasmine', 
                    'Daffodil',
                    np.NaN , 
                    'SunFlower', 
                    'Daisy'])

print(series)

El ejemplo Series es,

0          Rose
1          Lili
2         Tulip
3           NaN
4        Orchid
5      Hibiscus
6       Jasmine
7      Daffodil
8           NaN
9     SunFlower
10        Daisy
dtype: object

Usamos NumPy para generar valores NaN.

El parámetro arg es un parámetro obligatorio. Si no se pasa, entonces la función genera un TypeError. Primero pasaremos una serie como parámetro arg.

Para mapear dos Series la última columna de la primera Serie debe ser la misma que el índice de la segunda Serie.

import pandas as pd
import numpy as np

first_series = pd.Series(
    [
        "Rose",
        "Lili",
        "Tulip",
        np.NaN,
        "Orchid",
        "Hibiscus",
        "Jasmine",
        "Daffodil",
        np.NaN,
        "SunFlower",
        "Daisy",
    ]
)

second_series = pd.Series(
    [23, 34, 67, 90, 21, 45, 29, 70, 56],
    index=[
        "Rose",
        "Lili",
        "Tulip",
        "Orchid",
        "Hibiscus",
        "Jasmine",
        "Daffodil",
        "SunFlower",
        "Daisy",
    ],
)

series1 = first_series.map(second_series)
print(series1)

Producción:

0     23.0
1     34.0
2     67.0
3      NaN
4     90.0
5     21.0
6     45.0
7     29.0
8      NaN
9     70.0
10    56.0
dtype: float64

Note que la función ha sustituido los valores después de comparar las dos Series.

Códigos de ejemplo: Series.map() para pasar un diccionario como parámetro arg

import pandas as pd
import numpy as np

series = pd.Series(
    [
        "Rose",
        "Lili",
        "Tulip",
        np.NaN,
        "Orchid",
        "Hibiscus",
        "Jasmine",
        "Daffodil",
        np.NaN,
        "SunFlower",
        "Daisy",
    ]
)

dictionary = {
    "Rose": "One",
    "Lili": "Two",
    "Orchid": "Three",
    "Jasmine": "Four",
    "Daisy": "Five",
}

series1 = series.map(dictionary)
print(series1)

Producción:

0       One
1       Two
2       NaN
3       NaN
4     Three
5       NaN
6      Four
7       NaN
8       NaN
9       NaN
10     Five
dtype: object

Los valores de la Series que no están en el diccionario son reemplazados por un valor NaN.

Códigos de ejemplo: Series.map() para pasar una función como parámetro arg

Ahora pasaremos una función como parámetro.

import pandas as pd
import numpy as np

series = pd.Series(
    [
        "Rose",
        "Lili",
        "Tulip",
        np.NaN,
        "Orchid",
        "Hibiscus",
        "Jasmine",
        "Daffodil",
        np.NaN,
        "SunFlower",
        "Daisy",
    ]
)

series1 = series.map("The name of the flower is {}.".format)
print(series1)

Producción:

0          The name of the flower is Rose.
1          The name of the flower is Lili.
2         The name of the flower is Tulip.
3           The name of the flower is nan.
4        The name of the flower is Orchid.
5      The name of the flower is Hibiscus.
6       The name of the flower is Jasmine.
7      The name of the flower is Daffodil.
8           The name of the flower is nan.
9     The name of the flower is SunFlower.
10        The name of the flower is Daisy.
dtype: object

Aquí, hemos pasado la función string.format() como parámetro. Note que la función ha sido aplicada a los valores NaN también. Si no queremos aplicar esta función a los valores de NaN entonces pasaremos el valor ignore al parámetro na_action.

import pandas as pd
import numpy as np

series = pd.Series(
    [
        "Rose",
        "Lili",
        "Tulip",
        np.NaN,
        "Orchid",
        "Hibiscus",
        "Jasmine",
        "Daffodil",
        np.NaN,
        "SunFlower",
        "Daisy",
    ]
)

series1 = series.map("The name of the flower is {}.".format, na_action="ignore")
print(series1)

Producción:

0          The name of the flower is Rose.
1          The name of the flower is Lili.
2         The name of the flower is Tulip.
3                                      NaN
4        The name of the flower is Orchid.
5      The name of the flower is Hibiscus.
6       The name of the flower is Jasmine.
7      The name of the flower is Daffodil.
8                                      NaN
9     The name of the flower is SunFlower.
10        The name of the flower is Daisy.
dtype: object

El código de ejemplo anterior ha ignorado los valores NaN.

Códigos de ejemplo: Series.map() para aplicarla en un DataFrame

import pandas as pd

dataframe = pd.DataFrame(
    {
        "Attendance": {0: 60, 1: 100, 2: 80, 3: 75, 4: 95},
        "Name": {0: "Olivia", 1: "John", 2: "Laura", 3: "Ben", 4: "Kevin"},
        "Obtained Marks": {0: 56, 1: 75, 2: 82, 3: 64, 4: 67},
    }
)

dataframe1 = dataframe.map("The flower name is {}.".format)
print(dataframe1)

Producción:

AttributeError: 'DataFrame' object has no attribute 'map'

La función ha generado el AttributeError.

Artículo relacionado - Pandas Series