Pandas.Seriesの各要素に対して関数を適用させるmap関数!

こんにちは!インストラクターのフクロウです!この記事では、pd.Seriesの各要素に関数を適用するメゾット、mapについて紹介します。pd.Series.mapはSeries型版の(ほかの関数でもよく見る)map関数です。

この説明で概要がわからない人、この記事を読みすすめてmapメソッドの使い方を覚えちゃいましょう!

開発環境

この記事を書くために使った開発環境は以下のとおりです。

ライブラリのバージョンなど

  • OS="Ubuntu 18.04.1 LTS"
  • Python 3.7.0
  • Pandas 0.23.4

OSが異なっても基本的には同じ操作で記事中のプログラムは再現できるので、試してみてください!

mapのAPI

Series.map(arg, # 適用したい関数
           na_action=None)

mapメソッドで覚えておきたいのは第一引数です。第一引数に、Seriesの各要素に適用したい関数を渡しましょう。詳しい使い方は次のセクションで!また、mapのAPIについての詳細な解説は、以下の公式ドキュメントに書かれています。

mapの使い方

ライブラリのimportとデータ作成

まずは必要なライブラリのimportとサンプルのSeriesを作ります。

In [1]: import numpy as np

In [2]: import pandas as pd

In [3]: X = np.arange(0,10)

In [4]: X = pd.Series(X)

In [5]: X
Out[5]:
0    0
1    1
2    2
3    3
4    4
5    5
6    6
7    7
8    8
9    9
dtype: int64

シンプルな使い方

mapメソッドは、Seriesの先頭要素から終わりの要素まで、関数を適用していく機能を持ちます。イメージとしては、for文でリストのすべての要素に対して処理を行う感じです。

例として、test関数(😁の吹き出しに、関数が受け取った要素を表示している形の文字列を返す機能)をmapメソッドに使ってみます。

In [6]: def test(x):
   ...:         # mapの中で使う関数の例です。
   ...:         return f"😁<{x}"

In [7]: X.map(test)
Out[7]:
0    😁<0
1    😁<1
2    😁<2
3    😁<3
4    😁<4
5    😁<5
6    😁<6
7    😁<7
8    😁<8
9    😁<9
dtype: object

Xの中には0~9の数字でした。これをmapを介して全てtest関数に通した結果がOut[9]の表示です。しっかり最初から最後まで適用できているようですね。

また、mapでリストを返す関数を扱う場合の例も見ておきましょう。

In [8]: def test2(x):
   ...:         return [x, x**x]

In [9]: X.map(test2)
Out[9]:
0            [0, 1]
1            [1, 1]
2            [2, 4]
3           [3, 27]
4          [4, 256]
5         [5, 3125]
6        [6, 46656]
7       [7, 823543]
8     [8, 16777216]
9    [9, 387420489]
dtype: object

例えば2要素のリストを返す関数があったとき、もしかしたらDataFrameが出力されないかな?って思うかもしれません。

ですが残念ながら、このようなコンテナ型(複数要素をもったデータ型)はすべてobject型というdtype扱いになり、Series型が返ってきています。

これはtest2関数がSeries型を返すとしても、この関数をmapで適用した出力は「Series型を内包したSeries型」になります。

まとめ

この記事では、pandas.Series.mapメソッドについて紹介しました。

mapメソッドの要点

  • mapメソッドはSeries型の各要素に引数に渡された関数を適用する機能


DataFrameのapply、applymapと並んで覚えておきたいPandasの基本操作なので、ぜひ使ってみてください!

LINEで送る
Pocket

「プログラミング、右も左もわからない…」という方にオススメ

当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

書いた人

フクロウ

フクロウ

第一言語はPythonです。
皆さんRustやりましょう。