본문 바로가기
여러 가지 이야기/파이썬 및 그 밖의 라이브러리의 팁

[python] 조건문이 포함된 함수를 lambda 함수로 생성하기

by 김판다t 2023. 8. 9.

파이썬에서 조건문이 포함된 함수를 lambda 함수로 생성하기

 

이 장에서는 파이썬에서 조건문이 포함된 함수를 전통적인 def 함수로 정의하는 방법과, 이를 더 간결하게 lambda 함수로 변환하는 방법을 설명합니다. 실습 예제로는 입력값이 3 이상일 때 'A'를 반환하고, 3 미만일 때 'B'를 반환하는 함수를 생성해 보겠습니다.

 

Part1. def로 정의

 

먼저, def 키워드를 사용하여 함수를 정의합니다. 이 함수는 입력값에 따라 'A' 또는 'B'를 반환하며, 함수 이름은 func1으로 지정합니다.

def func1(x):
    if x >= 3:
        return 'A'
    else:
        return 'B'
 
함수 func1에 숫자 3을 입력하면 다음과 같이 'A'를 반환합니다.
func1(3)
'A'
 

Part2. def로 정의한 함수를 apply와 함께 시리즈에 적용하기

여러분이 주로 판다스를 사용하여 데이터를 처리하기 때문에, 이제 판다스 라이브러리의 apply 메서드를 사용하여 앞서 정의한 func1을 데이터 시리즈에 적용하는 방법을 실습해 보겠습니다. 예시로 사용할 시리즈는 다음과 같습니다.

import pandas as pd
s = pd.Series([1, 2, 3, 4])
s
0    1
1    2
2    3
3    4
dtype: int64
 
시리즈 s에 apply 메서드를 사용하여 func1을 적용하는 코드는 아래와 같습니다.
s.apply(func1)
출력 결과를 s와 함께 비교하면 다음과 같습니다.
     s             s.apply(func1)    

0    1     ->        B   
1    2     ->        B
2    3     ->        A
3    4     ->        A

 

시리즈 s에서 값이 3 이상인 경우는 'A'가, 3 미만인 경우는 'B'가 반환되었습니다.

 

Part 3: 동일한 기능을 하는 lambda 함수 생성하기

이제 앞서 정의한 func1 함수를 동일한 기능을 하는 lambda 함수로 변환해보겠습니다. lambda 함수는 아래와 같이 정의할 수 있습니다.

lambda x: 'A' if x >= 3 else 'B'

 

여러분이 주로 Pandas를 사용하여 데이터를 처리하기 때문에, 이번에도 apply 메서드를 사용하여 lambda 함수를 시리즈에 적용하는 방법을 실습해 보겠습니다. 이 lambda 함수를 시리즈에 적용하면, def로 정의된 함수보다 코드가 간결해지고, 함수의 기능을 직관적으로 이해할 수 있습니다.

 

s.apply(lambda x: 'A' if x >= 3 else 'B')
0    B
1    B
2    A
3    A

 

func1을 적용했을 때와 같은 결과를 반환합니다.

주의사항

 

판다스 사용자들은 대부분의 경우에는 if 문을 포함한 함수를 직접 작성할 필요가 없습니다. np.where와 같은 넘파이 함수를 사용하면 훨씬 간결하게 처리할 수 있으며, 벡터화 연산을 통해 속도도 빠릅니다. 조건문이 포함된 함수를 만드는 방법을 알고 있는 것은 유용하지만, 조건문 함수와 apply 메서드의 조합보다는 판다스와 넘파이에서 제공하는 불리언 마스킹 함수들을 사용하는 것이 더 효율적입니다.

import numpy as np
np.where(s >= 3, 'A', 'B')
array(['B', 'B', 'A', 'A'], dtype='<U1')

 

또한 if 문 뿐만 아니라 elif 문이 포함되는 경우 lambda 함수로는 어떻게 구현하는 방법은 후속 포스팅에서 다루겠습니다.


교보문고 구매 페이지알라딘 구매 페이지yes24 구매 페이지

 

 

 

유튜브에서 판다스 강의 중입니다.

https://www.youtube.com/@KimPandas