반응형

안녕하세요. PSYda입니다.

Series와 DataFrame을 다루다 보면 각각의 열/행 데이터에 함수를 일괄적으로 적용해야 할 때가 있습니다.

이번 포스팅에서는 Series와 DataFrame의 요소에 함수를 적용하는 방법에 대해 알아보겠습니다.

소개할 내용은 아래와 같습니다.

  • Series 각각 요소에 함수 일괄 적용(map함수)
  • DataFrame의 행, 열 별 함수 일괄 적용(apply함수)
  • DataFrame의 요소에 함수 일괄 적용(applymap함수)

8. Series와 DataFrame에 외부 함수 적용하기

  • map 함수 : Series에서 사용하며 모든 요소에 함수 일괄 적용
  • apply 함수 : DataFrame에서 사용하며 각각의 행 또는 열(Series)에 함수 일괄 적용
  • applymap 함수 : DataFrame에서 사용하며 모든 요소에 함수 일괄 적용

8.1 Series의 각각의 요소에 함수 적용하기

map(Function name)

  • Series에서 사용가능한 함수
  • Series의 모든값(values)에 대해 입력된 함수 일괄 적용

pandas library import

import pandas as pd
from pandas import Series , DataFrame
srAge = Series([10,13,15,23,22,36])
srAge
0    10
1    13
2    15
3    23
4    22
5    36
dtype: int64

나이의 범위에 따라 10대, 20대, 30대로 변경하는 함수 생성

  • 10~19 : 10대
  • 20~29 : 20대
  • 30~39 : 30대
  • 그외 : NaN값

으로 변경

def weekday2weeknumber(age):
    if age >= 10 and age < 20:
        ageRange = '10대'
    elif age >= 20 and age < 30:
        ageRange = '20대'
    elif age >= 30 and age < 40:
        ageRange = '30대'
    else:
        ageRange = pd.np.nan
    return ageRange

map 함수로 Series의 각각의 값에 함수 적용

srAgeRange = srAge.map(weekday2weeknumber)
srAgeRange
0    10대
1    10대
2    10대
3    20대
4    20대
5    30대
dtype: object

8.2 DataFrame의 각 열 또는 행에 함수 일괄 적용하기

apply(Function name)

  • DataFrame에서 사용 가능한 함수
  • DataFrame의 행 또는 열에 해당하는 Series에 함수를 일괄 적용

axis 옵션

  • axis = 0(Defualt) : 열기준 함수 적용
  • axis = 1 : 행기준 함수 적용

DataFrame 생성

df = DataFrame([[1,3,5],[4,5,6],[7,8,10]])
df

0 1 2
0 1 3 5
1 4 5 6
2 7 8 10

행 또는 열의 최대값과 최소값의 차이를 구하는 함수 생성

def maxMinusMin(sr):
    return sr.max() - sr.min()
df.apply(maxMinusMin, axis = 0)
0    6
1    5
2    5
dtype: int64
df.apply(maxMinusMin, axis = 1)
0    4
1    2
2    3
dtype: int64

return값을 조정하여 여러개의 열 또는 컬럼으로 출력 가능

def maxMinusMin2(sr):
    sr2 = Series([sr.max(), sr.min(), sr.max()-sr.min()], index = ['최대값','최소값','차이'])
    return sr2
df.apply(maxMinusMin2, axis =0)

0 1 2
최대값 7 8 10
최소값 1 3 5
차이 6 5 5
df.apply(maxMinusMin2, axis =1)

최대값 최소값 차이
0 5 1 4
1 6 4 2
2 10 7 3

8.3 DataFrmae의 각각 요소에 함수 일괄 적용하기

applymap(Function name)

  • DataFrame에서 사용가능한 함수
  • DataFrame의 모든값(values)에 대해 함수 일괄 적용

DataFrame 생성

df2 = DataFrame([[1,1,1],[2,2,2],[3,3,3]])
df2

0 1 2
0 1 1 1
1 2 2 2
2 3 3 3

입력값의 제곱을 리턴하는 함수 생성

def square(x):
    y = x * x
    return y

df2.applymap(square)

0 1 2
0 1 1 1
1 4 4 4
2 9 9 9

위의 Jupyter notebook 내용은 여기 Github에서도 확인 할 수 있습니다.

감사합니다.

반응형

+ Recent posts