본문 바로가기
Python/Pandas

요소별 함수의 적용 applymap(), map() 메서드-pandas(35)

by 콩돌 2020. 10. 10.
반응형

파이썬 버전 3.8 기준

pandas 버전 1.1.1 기준


 요소별 함수의 적용 applymap(), map() 메서드


pandas의 객체에 다른 라이브러리의 함수를 적용하는 방법이 존재한다.

아래의 메서드는 다른 라이브러리의 함수를 적용하는데 사용되는 메서드들이다.

  ○ 테이블형태로 정리해주는 함수 어플리케이션: pipe()

  ○ 행 혹은 열로 정리해주는 함수 어플리케이션: apply()

  ○ 집합 API: agg()transform()

  ○ 요소별 적용 함수: applymap()


본 포스팅에서는 applymap(), map() 메서드의 사용법에 대해 다루도록 한다.


 applymap(), map() 메서드


applymap(), map() 메서드는 요소별로 함수를 적용하는 메서드이다.

  ○ applymap() 메서드는 DataFrame에 적용되는 메서드이다.

  ○ map() 메서드는 Series에 적용되는 메서드이다.

아래 형식은 메서드 사용 형식을 보여준다.


메서드 사용 형식)

result=DataFrame.applymap(func)

result=Series.map(arg)

 

각 입력 객체별 설명은 다음과 같다.

  ○ func: 이 입력변수는 pandas 객체에 적용할 함수를 입력받는다.

  ○ arg: 이 입력변수는 pandas 객체에 적용할 함수나 맵핑시킬 딕셔너리와 같은 자료형을 입력받는다.

 


 applymap(), map() 메서드 사용 예제

예제를 수행하기 위해 다음과 같이 모듈 import와 DataFrame을 정의한다.


모듈의 import 및 예제용 DataFrame의 정의)

# pandas와 numpy의 import

In[2]: import pandas as pd

In[3]: import numpy as np


# 예제용 DataFrame의 정의

In[4]: sample_df= pd.DataFrame([[9.1, 1.2, 1.3, 1.4], [2.1, 9.2, 9.3, 2.4], [3.1, 3.2, 3.3, 3.4]], index=['a', 'b', 'c'], columns=['A','B','C','D'])


In[5]: sample_df

Out[5]: 

     A    B    C    D

a  9.1  1.2  1.3  1.4

b  2.1  9.2  9.3  2.4

c  3.1  3.2  3.3  3.4



아래 예제는 applymap(), map()메서드를 적용하는 예를 보여준다.

DataFrame에 기반을 둔 applymap()메서드와 Series를 기반한 map() 메서드는 Python 함수가 하나의 값을 입력받고 하나의 값을 반환할 수 있도록 한다.


메서드 사용 예제)

# 예제용 함수의 정의

In[6]: def ex_f(x):

...:    return np.exp(-x)

...:


# ex1-1: map() 메서드의 사용 예

In[7]: sample_df['A'].map(ex_f)

Out[7]: 

a    0.000112

b    0.122456

c    0.045049

Name: A, dtype: float64


# ex1-2: applymap() 메서드의 사용 예

In[8]: sample_df.applymap(ex_f)

Out[8]: 

          A         B         C         D

a  0.000112  0.301194  0.272532  0.246597

b  0.122456  0.000101  0.000091  0.090718

c  0.045049  0.040762  0.036883  0.033373



Series.map() 메서드는 추가적인 기능을 가진다.

mapping데이터를 통해 새로우 값을 Series로  있도록 한다.


mapping의 사용 예)

# 메서드 적용용 Series의 정의

In[9]: sample_s = pd.Series(['one', 'two', 'three', 'four'], index=['a','b','c','d'])


In[10]: sample_s

Out[10]: 

a      one

b      two

c    three

d     four

dtype: object


# ex2: map() 메서드의 mapping 사용 예

In[11]: s_map = {'one': 1, 'two': 2, 'three': 3, 'four': 4}

In[12]: sample_s.map(s_map)

Out[212]: 

a    1

b    2

c    3

d    4

dtype: int64




 applymap(), map() 메서드 세부사항



 DataFrame.applymap(func)


DataFrame에 함수를 각 요소별로 적용시킨다. 


func: callable

파이썬 함수를 입력받는다.

하나의 값으로부터 하나의 값을 반환한다.

즉, DataFrame내에 하나의 값에 대해 함수를 적용하여 그 값들에 대한 결과를 출력한다.



 Series.map(arg, na_action=None)


Series에 함수를 각 요소별로 적용시키거나, 메핑을 통한 치환을 수행한다. 


arg: function, Series, mapping 된 자료형(Dict 등)

함수나 메핑을 통한 치환을 위한 데이터를 입력받는다.

하나의 값으로부터 하나의 값을 반환한다.

즉, DataFrame내에 하나의 값에 대해 함수를 적용하여 그 값들에 대한 결과를 출력한다.


na_action: {None, 'ignore'}

기본값은 None이다.

'ignore'를 입력할 경우, mapping된 데이터가 NaN인 경우 함수적용을 하지 않고 NaN 값을 출력한다.  

  

  


 

 

 

 

 참고자료

  https://pandas.pydata.org/docs/user_guide/basics.html

  https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.applymap.html

  https://pandas.pydata.org/docs/reference/api/pandas.Series.map.html

 

 

 

 

 

반응형

댓글