Pythonでのmapの使い方とは?リストやDataFrameに対するmapの使い方を解説!

エンジニア
マネージャー
Pythonでのmapの使い方とは?
今回は、Pythonでのmapの使い方について説明します。
mapを使えば、リストや配列、辞書、DataFrameなどの全要素に対して、同じ処理をすることができます。例えば、リストの全要素を2倍して新しいリストを作成する、などが可能です。
Pythonでのmapの使い方に興味のある方はぜひご覧ください。
リスト
Pythonでのリストに対するmapの使い方を紹介します。実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 |
# listの生成 mylist = list(range(1, 11)) print(mylist) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # listの値を2倍する print(list(map(lambda x: x*2, mylist))) # [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] # listの値を2乗する print(list(map(lambda x: x**2, mylist))) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] |
実行結果は以下のようになります。
1 2 3 |
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] |
文字列リストについても、全要素に対して処理できます。
1 2 3 4 5 6 7 8 9 10 11 |
# 文字列をintに変換 print(list(map(int, ("1", "2", "3", "4", "5")))) # [1, 2, 3, 4, 5] # 1文字ずつ分割 print(list(map(lambda c: f'{c}', 'This is sample code.'))) # ['T', 'h', 'i', 's', ' ', 'i', 's', ' ', 's', 'a', 'm', 'p', 'l', 'e', ' ', 'c', 'o', 'd', 'e', '.'] # 先頭を大文字に変換 print(list(map(lambda k: k.capitalize(), ['red', 'green', 'blue', 'white', 'black']))) # ['Red', 'Green', 'Blue', 'White', 'Black'] |
実行結果は以下のようになります。
1 2 3 |
[1, 2, 3, 4, 5] ['T', 'h', 'i', 's', ' ', 'i', 's', ' ', 's', 'a', 'm', 'p', 'l', 'e', ' ', 'c', 'o', 'd', 'e', '.'] ['Red', 'Green', 'Blue', 'White', 'Black'] |
このようにPythonでは、リストに対してmapを使った処理ができます。
配列
Pythonでの配列に対するmapの使い方を紹介します。実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import numpy as np # 要素を2倍する関数 def myFunc(var): var *= 2 return var # 2次元配列 myarray = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] print(myarray) # [[1, 2, 3], [4, 5, 6], [7, 8, 9]] # 2次元配列の全要素にmyFuncを適用 f = np.vectorize(myFunc) myarray = f(myarray) print(myarray) #[[ 2 4 6] # [ 8 10 12] # [14 16 18]] |
実行結果は以下のようになります。
1 2 3 4 |
[[1, 2, 3], [4, 5, 6], [7, 8, 9]] [[ 2 4 6] [ 8 10 12] [14 16 18]] |
このようにPythonでは、配列に対してmapを使った処理ができます。
辞書
Pythonでの辞書に対するmapの使い方を紹介します。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# 辞書の生成 mydict = {"key1": 1, "key2": 2, "key3": 3, "key4": 4, "key5": 5} # keyの先頭を大文字に変換 print(list(map(lambda k: k.capitalize(), mydict))) # keyを連続で表示 print(list(map(lambda k: k+k, mydict))) # valueを2倍にする # mydict.items()を指定することで、keyは[0], valueは[1]でアクセスできる print(list(map(lambda k: k[1]*2, mydict.items()))) # keyをvalue分連続で表示 print(list(map(lambda k: k[0]*k[1], mydict.items()))) |
実行結果は以下のようになります。
1 2 3 4 |
['Key1', 'Key2', 'Key3', 'Key4', 'Key5'] ['key1key1', 'key2key2', 'key3key3', 'key4key4', 'key5key5'] [2, 4, 6, 8, 10] ['key1', 'key2key2', 'key3key3key3', 'key4key4key4key4', 'key5key5key5key5key5'] |
このようにPythonでは、辞書に対してmapを使った処理ができます。
DataFrame
PythonでのDataFrameに対するmapの使い方を紹介します。
実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import pandas as pd # 2次元配列の生成 myarray = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]] # dataframeに変換 df = pd.DataFrame(myarray) print(df) # 0 1 2 3 4 #0 1 2 3 4 5 #1 6 7 8 9 10 # dataframeの全要素を2倍する df = df.applymap(lambda x:x*2) print(df) # 0 1 2 3 4 #0 2 4 6 8 10 #1 12 14 16 18 20 |
実行結果は以下のようになります。
1 2 3 4 5 6 |
0 1 2 3 4 0 1 2 3 4 5 1 6 7 8 9 10 0 1 2 3 4 0 2 4 6 8 10 1 12 14 16 18 20 |
DataFrameに対しては、mapではなくapplymapを使用します。
CSVをDataFrameに読み込んで、全要素に対して処理する方法を紹介します。事前に、以下の内容のsample.csvを用意してください。
1 2 3 4 5 6 |
col1,col2,col3,col4,col5 1,2,3,4,5 6,7,8,9,10 11,12,13,14,15 16,17,18,19,20 21,22,232,24,25 |
それでは、実際のソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import pandas as pd # csvの読み込み df = pd.read_csv('sample.csv') print(df) # col1 col2 col3 col4 col5 #0 1 2 3 4 5 #1 6 7 8 9 10 #2 11 12 13 14 15 #3 16 17 18 19 20 #4 21 22 232 24 25 # 全要素に対して*2を実行 df2 = df.applymap(lambda x:x*2) print(df2) # col1 col2 col3 col4 col5 #0 2 4 6 8 10 #1 12 14 16 18 20 #2 22 24 26 28 30 #3 32 34 36 38 40 #4 42 44 464 48 50 |
実行結果は以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 |
col1 col2 col3 col4 col5 0 1 2 3 4 5 1 6 7 8 9 10 2 11 12 13 14 15 3 16 17 18 19 20 4 21 22 232 24 25 col1 col2 col3 col4 col5 0 2 4 6 8 10 1 12 14 16 18 20 2 22 24 26 28 30 3 32 34 36 38 40 4 42 44 464 48 50 |
このようにPythonでは、DataFrameに対してmapを使った処理ができます。
エンジニア
マネージャー
まとめ
いかがでしたでしょうか。Pythonでのmapの使い方について説明しました。mapを使えば、リストや配列、辞書、DataFrameなどの全要素に対して、同じ処理をすることができます。
ぜひご自身でソースコードを書いて、理解を深めてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


新着案件New Job
開発エンジニア/東京都品川区/【WEB面談可】/在宅ワーク
月給29万~30万円東京都品川区(大崎駅)遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク
月給45万~60万円東京都港区(六本木駅)病院内システムの不具合対応、保守/東京都豊島区/【WEB面談可】/テレワーク
月給30万~30万円東京都豊島区(池袋駅)開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク
月給50万~50万円東京都豊島区(大塚駅)債権債務システム追加開発/東京都文京区/【WEB面談可】/在宅勤務
月給62万~67万円東京都文京区(後楽園駅)PMO/東京都豊島区/【WEB面談可】/在宅勤務
月給55万~55万円東京都豊島区(池袋駅)