파이썬/데이터프레임 다루기

Pandas에서 함수형 방식으로 데이터프레임 다루기

Data Jun 2025. 3. 24. 15:41

왜 apply와 lambda를 써야 할까?

for문으로 데이터프레임 처리하려다 속도나 가독성 때문에 고민해본 적 있나요?
apply()와 lambda를 쓰면 반복문 없이도 각 행/열에 함수를 적용할 수 있어요.

 

lambda란?

f = lambda x: x * 2
print(f(3))  # 결과: 6

 

  • 한 줄짜리 함수 만들기
  • 함수 이름 없이도 임시적으로 사용할 수 있음

 

비교: 일반 함수 vs lambda

# 일반 함수
def double(x):
    return x * 2

# 동일한 lambda 함수
lambda x: x * 2

차이점은 lambda는 임시적이고 짧은 함수에 적합하며,
apply()처럼 인라인에서 바로 함수를 써야 할 때 코드가 훨씬 간결해집니다.

 

apply()란?

import pandas as pd

df = pd.DataFrame({'score': [90, 85, 77, 93]})
df['grade'] = df['score'].apply(lambda x: 'A' if x >= 90 else 'B')
print(df)

 

  • 각 요소에 함수를 "적용(apply)"하는 메서드
  • 열 전체, 혹은 행 전체에 함수 적용 가능

apply()의 작동 방식: 열 또는 행을 하나씩 함수에 전달

apply()는 Pandas의 DataFrame에서 각 열 또는 각 행을 반복하며 함수에 넘겨주는 방식으로 작동합니다.
즉, 내부적으로는 루프를 돌고 있지만, 사용자는 함수만 전달하면 되기 때문에 훨씬 간결하고 파이썬스러운 코드를 만들 수 있습니다.

 

작동 흐름

1. DataFrame을 받아들인다
2. axis 값에 따라 열 또는 행을 하나씩 선택
3. 각 열/행을 Series 객체로 만들어 함수에 전달
4. 함수의 반환값을 모아서 새로운 Series로 반환

 

실전 예제

import pandas as pd

df = pd.DataFrame({
    '이름': ['철수', '영희', '민수'],
    '점수': [92, 81, 75]
})

# 점수에 따라 합격 여부 판단
df['결과'] = df['점수'].apply(lambda x: '합격' if x >= 80 else '불합격')

 

행 기준으로 apply 쓰기 (axis=1)

df = pd.DataFrame({
    '국어': [90, 80],
    '영어': [70, 85]
})

df['평균'] = df.apply(lambda row: (row['국어'] + row['영어']) / 2, axis=1)

 

axis=0: 열(column)을 기준으로 작동

 

많이 사용하는 axis=1과 달리 axis=0은 각 열에 함수가 적용됩니다.
즉, DataFrame의 "열 단위로" 반복하며, 각 열을 Series로 넘겨서 함수를 실행합니다.

import pandas as pd

df = pd.DataFrame({
    'math': [90, 85, 80],
    'english': [70, 88, 95],
    'science': [85, 82, 78]
})

# 각 열의 평균 계산
column_means = df.apply(lambda col: col.mean(), axis=0)
print(column_means)

출력 결과:

math       85.0
english    84.3
science    81.6
dtype: float64

→ 여기서 apply()는 각 열(column) 을 col이라는 Series로 받아 평균을 계산하고 있습니다.
→ axis=0은 열을 순회하면서 함수 적용, axis=1은 행을 순회하면서 함수 적용이라는 점을 기억하세요.

 

axis 파라미터: 행 vs 열, 어디에 적용할 것인가?

apply()를 사용할 때 자주 마주치는 파라미터 중 하나가 axis입니다.
이 값에 따라 함수가 적용되는 방향이 달라지므로 꼭 이해하고 있어야 하죠.

 

마무리

lambda는 익명 함수, apply는 각 행/열에 함수를 적용할 수 있게 해주는 도구!

둘을 같이 쓰면 데이터 전처리나 조건 분기 처리가 훨씬 더 직관적이고 간결해집니다.