[Python] lambda expression


자주 안쓰면 헷갈리는 lambda_expression을 정리해두었다.

import pandas as pd

df = pd.read_csv("./data/titanic/train.csv")
df.head(3)
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS

apply lambda

일반 함수와 lambda 식 비교

def get_square(a):
    return a**2

print("3의 제곱 : ", get_square(4))
3의 제곱 :  16
lambda_square = lambda x : x**2
print("3의 제곱은 :", lambda_square(4))
3의 제곱은 : 16

Map함수와 사용

여러개의 인자를 받을 경우 map()함수와 함꼐 사용

a = [1,2,3]
squares = map(lambda x : x**2, a)
list(squares)
[1, 4, 9]
df["Name_len"] = df["Name"].apply(lambda x : len(x))
df[["Name_len", "Name"]].head(3)
Name_lenName
023Braund, Mr. Owen Harris
151Cumings, Mrs. John Bradley (Florence Briggs Th...
222Heikkinen, Miss. Laina

lambda 조건식

  • elif는 지원하지 않음
  • 원할 시 내포해서 써야함
df["Child_Adult"] = df["Age"].apply(lambda x : "Child" if x<=15 else "Adult")
df[["Child_Adult", "Age"]].head(4)
Child_AdultAge
0Adult22.0
1Adult38.0
2Adult26.0
3Adult35.0
df["Age_cat"] = df["Age"].apply(lambda x : "child" if x <10 else ("teenager" if x < 20 else "Adult"))
df[["Age_cat", "Age"]].head(10)
Age_catAge
0Adult22.0
1Adult38.0
2Adult26.0
3Adult35.0
4Adult35.0
5AdultNaN
6Adult54.0
7child2.0
8Adult27.0
9teenager14.0

별도의 함수를 구성해서 사용하기

def get_age_cat(age):
    cat = ''
    if age <=5 : cat = "Baby"
    elif age <12 : cat = "Child"
    elif age <20 : cat = "Teenager"
    elif age <60 : cat = "Adult"
    else : cat = "Elderly"
    
    return cat

df["Age_cat"] = df["Age"].apply(lambda x : get_age_cat(x))
df[["Age_cat", "Age"]].head(10)
Age_catAge
0Adult22.0
1Adult38.0
2Adult26.0
3Adult35.0
4Adult35.0
5ElderlyNaN
6Adult54.0
7Baby2.0
8Adult27.0
9Teenager14.0



© 2021.04. by Jessie

Powered by jessie