나홀로 데이터 분석가의 1인 연구실
[Python] 데이터 전처리를 위한 apply(lambda)문 사용하기 본문
개인적으로 데이터 전처리를 할 때 핵심이라고 생각하는 apply(lambda)에 대해 알아보겠습니다.
우선 데이터프레임(판다스)에서의 apply()와 lambda에 대해서 알아보겠습니다.
이하 내용에서 줄임말은 아래와 같이 사용할 예정입니다.
- df: 데이터프레임
- func: 함수
0-1. Apply() 함수
Apply(func): 'func라는 함수를 모든 값에 적용하라'라는 의미입니다.
만약, 데이터프레임['열'].apply(func)를 사용하면, 해당 열에 모든 값에 func를 적용하게 됩니다.
💡여기서 함수(func)는 제가 정의해도 되고, 있는 함수를 쓰셔도 무방합니다.
<그림1>의 데이터 셋에서 passengers가 1이면 '나홀로', 2이상이면 '여럿'을 출력하려면 아래와 같이 가능합니다.
# 적용할 함수 정의
def func(x):
if x == 1:
return '나홀로'
elif x>= 2:
return '여럿'
else:
return None
# 적용
df['status'] = df.passengers.apply(func)
0-2. Lambda
기본적으로 Lambda는 한 줄짜리 함수(func)라고 생각하시면 편합니다.
(Lambda x : func)(x): 'x라는 변수에 func라는 함수를 적용하라' 라는 의미입니다.
여기서 변수는 꼭 1개일 필요없이 여러개를 사용하셔도 무방합니다.
(lambda x, y : x + y)(3,5)
(lambda x : x.split(' ')[0])('나홀로 데이터 분석가')
func = lambda a, b : a + b
func(1,2)
0-3. Apply() + Lambda
df['columns'].apply(lambda x : func): 'df의 column이라는 행에 func를 모두 적용하라'라는 의미입니다.
위 <그림1> 데이터에서 dropoff에서 시간은 제외하고, 날짜만 추출해보겠습니다.
df.dropoff.apply(lambda x : x.split(" ")[0])
apply(lambda x : func)를 사용할 때에는 lambda에 입력값이 df.dropoff의 값이 됩니다.
여기서 만약 df.dropoff.split(" ")[0]을 입력한다면 에러가 발생합니다.
그 이유는 df.dropoff는 pd.Series이고, Series 자체에 split() 함수를 적용하려고 하기에 에러가 발생합니다.
반면 apply(lambda)는 pd.Series의 개별 값 하나하나에 적용되는 것이기에 split()함수가 적용되는 것입니다.
'Python > Theory' 카테고리의 다른 글
[시각화] matplotlib 공통 함수 (0) | 2023.01.02 |
---|---|
[시각화] plt.scatter()를 활용한 산점도 그리기 (0) | 2023.01.02 |
[Python] tqdm을 통해 for, apply문 진행율 확인하기 (0) | 2022.12.27 |
[Python] 라이브러리 설치 시 [WinError 5] 에러 대처하기 (0) | 2022.12.27 |
[웹 크롤링] find_all 함수로 웹 페이지 내 Element 추출하기 (0) | 2022.12.26 |