# apply()
- 주로 DataFrame 또는 Series의 축(axis)을 따라 함수를 적용하는 데 사용된다.
- DataFrame 또는 Series의 각 요소, 행 또는 열에 함수를 적용하여 결과를 적용된 함수의 결과로 포함하는 새로운 DataFrame 또는 Series를 반환할 수 있다.
# lambda
- 파이썬에서 사용되는 익명 함수
- 일반적인 함수를 정의하는 def 키워드 대신 lambda 키워드를 사용하여 작성된다.
- 주로 map(), filter(), reduce()와 같은 함수와 함께 또는 고차 함수에 대한 인수로 사용될 때 특히 유용하다.
# apply lambda
- pandas는 apply 함수에 lambda 식을 결합하여 DataFrame이나 Series의 레코드별로 데이터를 가공하는 기능을 제공한다.
- pandas의 경우 칼럼에 일괄적으로 데이터 가공을 하는 것이 속도 면에서 더 빠르나 복잡한 데이터 가공이 필요할 경우 어쩔 수 없이 apply lambda를 이용한다.
- 데이터 불러오기: https://www.kaggle.com/c/titanic/data
import pandas as pd
titanic_df = pd.read_csv("./data/titanic_train.csv")
- DataFrame의 apply에 lambda 식을 적용하여 데이터 가공하기
# 'Name' 칼럼의 문자열 개수를 별도의 칼럼인 'Name_len'에 생성하기
titanic_df['Name_len'] = titanic_df['Name'].apply(lambda x: len(x))
titanic_df.head()
- lambda 식에서 if else 절을 사용하여 조금 더 복잡한 가공 실행하기
# 나이가 15세 미만이면 'Child', 그렇지 않으면 'Adult'로 구분하는 새로운 칼럼 'Child_Adult' 생성하기
titanic_df['Child_Adult'] = titanic_df['Age'].apply(lambda x : 'Child' if x <=15 else 'Adult')
titanic_df.head()
- lambda 식에서 if else를 사용할 때 주의할 점
- if 절의 경우 if 식보다 반환 값을 먼저 기술해야 한다. 이는 lambda 식 ':' 기호의 오른편에 반환 값이 있어야 하기 때문이다.
- if, else 만 지원하고 if, else if, else와 같이 else if는 지원하지 않는다. else if를 이용하기 위해서는 else 절을 ()로 내포하여 () 내에서 다시 if else를 적용하여 사용한다.
titanic_df['Age_cat'] = titanic_df['Age'].apply(lambda x : 'Child' if x<=15 else ('Adult' if x<=60 else 'Elderly'))
titanic_df['Age_cat'].value_counts()
- else if가 많이 나와야 하는 경우나 switch case 문의 경우는 else를 계속 내포해서 쓰기에 부담스럽다. 이러한 경우에는 별도의 함수를 만드는 게 더 나을 수 있다.
- 별도의 함수를 만들어 데이터 가공하기
def get_category(age):
cat = ''
if age <= 5: cat = 'Baby'
elif age <= 12: cat = 'Child'
elif age <= 18: cat = 'Teenager'
elif age <= 25: cat = 'Student'
elif age <= 35: cat = 'Young Adult'
elif age <= 60: cat = 'Adult'
else : cat = 'Elderly'
return cat
# lambda 식에 위에서 생성한 get_category() 함수를 반환값으로 지정
# get_category(X)는 입력값으로 'Age' 칼럼 값을 받아서 해당하는 cat 반환
titanic_df['Age_cat'] = titanic_df['Age'].apply(lambda x : get_category(x))
titanic_df.head()
728x90
'Python' 카테고리의 다른 글
[Pandas] 데이터프레임의 행/열/데이터 개수 세기 (0) | 2024.11.18 |
---|---|
[Python] enumerate() (4) | 2024.11.14 |
[Matplotlib] 데이터 시각화 (0) | 2024.02.03 |
[Pandas] 데이터 파일 읽고 쓰기 (0) | 2024.02.03 |
[Pandas] loc vs iloc (0) | 2024.02.02 |