Pandas Series.map() 関数

Minahil Noor 2023年1月30日
  1. pandas.Series.map() の構文
  2. コード例:Series.map()
  3. コード例:辞書を arg パラメーターとして渡すための Series.map()
  4. コード例:関数を arg パラメーターとして渡すための Series.map()
  5. コード例:Series.map() を DataFrame に適用するには
Pandas Series.map() 関数

Python Pandas Series.map() 関数は Series の値を置換します。置換された値は、Series、辞書、関数のいずれかから取得することができます。この関数は Series に対してのみ動作します。この関数を DataFrame に適用すると、AttributeError が発生します。

pandas.Series.map() の構文

Series.map(arg, na_action=None)

パラメータ

arg これは関数、dictionary、または Series です。置換される値はこの関数, dictionarySeries から派生したものです。
na_action このパラメータには 2つの値を指定することができます。Noneignore の 2つの値を指定することができます。デフォルト値は None です。ignore が指定された場合、派生値を NaN 値にマッピングしません。NaN 値は無視されます。

戻り値

呼び出し元と同じインデックスを持つ Series を返します。

コード例:Series.map()

パラメータ na_action を渡した後の出力を確認するために、NaN の値を含む Series を生成します。

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)

Series 例は以下のようになります。

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

NaN の値を生成するには NumPy を使用します。

パラメータ arg は必須のパラメータです。これが渡されなかった場合、関数は TypeError を生成します。まず、arg パラメータに系列を渡します。

2つの系列をマッピングするには、最初の系列の最後の列が 2 番目の系列のインデックスと同じでなければなりません。

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)

出力:

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

この関数は 2つの Series を比較した後に値を置換していることに注意してください。

コード例:辞書を arg パラメーターとして渡すための Series.map()

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)

出力:

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

辞書にない Series の値は NaN の値に置き換えられます。

コード例:関数を arg パラメーターとして渡すための Series.map()

ここでは、パラメータとして関数を渡します。

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)

出力:

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

ここでは、パラメータとして string.format() 関数を渡しています。この関数は NaN の値にも適用されていることに注意してください。この関数を NaN の値に適用したくない場合は、na_action パラメータに ignore の値を渡します。

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)

出力:

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

上の例では NaN の値を無視しています。

コード例:Series.map() を 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)

出力:

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

この関数は AttributeError を生成しました。

関連記事 - Pandas Series