[Python] lambda expression
in DATA on Python, Python_Data, Pandas, Lmabda_expression
자주 안쓰면 헷갈리는 lambda_expression을 정리해두었다.
import pandas as pd
df = pd.read_csv("./data/titanic/train.csv")
df.head(3)
| PassengerId | Survived | Pclass | Name | Sex | Age | SibSp | Parch | Ticket | Fare | Cabin | Embarked |
---|
0 | 1 | 0 | 3 | Braund, Mr. Owen Harris | male | 22.0 | 1 | 0 | A/5 21171 | 7.2500 | NaN | S |
---|
1 | 2 | 1 | 1 | Cumings, Mrs. John Bradley (Florence Briggs Th... | female | 38.0 | 1 | 0 | PC 17599 | 71.2833 | C85 | C |
---|
2 | 3 | 1 | 3 | Heikkinen, Miss. Laina | female | 26.0 | 0 | 0 | STON/O2. 3101282 | 7.9250 | NaN | S |
---|
apply lambda
일반 함수와 lambda 식 비교
def get_square(a):
return a**2
print("3의 제곱 : ", get_square(4))
lambda_square = lambda x : x**2
print("3의 제곱은 :", lambda_square(4))
Map함수와 사용
여러개의 인자를 받을 경우 map()
함수와 함꼐 사용
a = [1,2,3]
squares = map(lambda x : x**2, a)
list(squares)
df["Name_len"] = df["Name"].apply(lambda x : len(x))
df[["Name_len", "Name"]].head(3)
| Name_len | Name |
---|
0 | 23 | Braund, Mr. Owen Harris |
---|
1 | 51 | Cumings, Mrs. John Bradley (Florence Briggs Th... |
---|
2 | 22 | Heikkinen, 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_Adult | Age |
---|
0 | Adult | 22.0 |
---|
1 | Adult | 38.0 |
---|
2 | Adult | 26.0 |
---|
3 | Adult | 35.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_cat | Age |
---|
0 | Adult | 22.0 |
---|
1 | Adult | 38.0 |
---|
2 | Adult | 26.0 |
---|
3 | Adult | 35.0 |
---|
4 | Adult | 35.0 |
---|
5 | Adult | NaN |
---|
6 | Adult | 54.0 |
---|
7 | child | 2.0 |
---|
8 | Adult | 27.0 |
---|
9 | teenager | 14.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_cat | Age |
---|
0 | Adult | 22.0 |
---|
1 | Adult | 38.0 |
---|
2 | Adult | 26.0 |
---|
3 | Adult | 35.0 |
---|
4 | Adult | 35.0 |
---|
5 | Elderly | NaN |
---|
6 | Adult | 54.0 |
---|
7 | Baby | 2.0 |
---|
8 | Adult | 27.0 |
---|
9 | Teenager | 14.0 |
---|