Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

판다스(Pandas) DataFrame의 모든 행에 함수 적용하는 방법

데이터 분석 작업을 하다 보면 DataFrame의 모든 행에 동일한 연산이나 함수를 일괄 적용해야 하는 경우가 자주 발생합니다. 판다스(Pandas)에서는 apply() 메서드를 활용하면 이러한 작업을 간단하게 처리할 수 있습니다. 이 글에서는 람다(lambda) 함수를 사용하는 방법과 사용자 정의 함수를 적용하는 방법, 두 가지 방식을 예제와 함께 살펴보겠습니다.

방법 1: 람다(lambda) 함수를 각 행에 적용하기

가장 간결한 방법은 apply() 메서드에 람다 함수를 전달하고, axis=1 옵션을 지정하여 각 행 단위로 연산을 수행하는 것입니다.

예제 코드

import pandas as pd

df = pd.DataFrame([(10, 3, 13), (0, 42, 11), (26, 52, 1)], columns=list('xyz'))
print("기존 데이터프레임")
print(df)

NewMatrix = df.apply(lambda a: a + 10, axis=1)
print("변경된 데이터프레임")
print(NewMatrix)

실행 결과:

기존 데이터프레임
     x   y   z
0   10   3  13
1    0  42  11
2   26  52   1

변경된 데이터프레임
     x   y   z
0   20  13  23
1   10  52  21
2   36  62  11

위 코드에서는 람다 함수 lambda a: a + 10을 통해 각 행의 모든 값에 10을 더했습니다. axis=1은 열(column)이 아닌 행(row) 방향으로 함수를 적용하겠다는 의미입니다.

방법 2: 사용자 정의 함수(User Defined Function) 적용하기

복잡한 로직이 필요한 경우에는 직접 정의한 함수를 apply()에 전달할 수 있습니다. 아래 예제는 각 값의 제곱을 계산하는 함수를 모든 행에 적용합니다.

예제 코드

import pandas as pd

def SquareData(x):
    return x * x

df = pd.DataFrame([(10, 3, 13), (0, 42, 11), (26, 52, 1)], columns=list('xyz'))
print("기존 데이터프레임")
print(df)

NewMatrix = df.apply(SquareData, axis=1)
print("변경된 데이터프레임")
print(NewMatrix)

실행 결과:

기존 데이터프레임
     x   y   z
0   10   3  13
1    0  42  11
2   26  52   1

변경된 데이터프레임
      x     y     z
0   100     9   169
1     0  1764   121
2   676  2704     1

사용자 정의 함수 SquareData는 입력받은 값을 제곱하여 반환합니다. apply() 메서드에 이 함수를 전달하면 DataFrame의 각 요소에 제곱 연산이 수행됩니다.

정리

  • df.apply(함수, axis=1): 행(row) 단위로 함수를 적용합니다.
  • axis=0(기본값): 열(column) 단위로 함수를 적용합니다.
  • 간단한 연산은 람다 함수로, 복잡한 로직은 사용자 정의 함수로 처리하는 것이 좋습니다.

apply() 메서드를 잘 활용하면 반복문 없이도 벡터화된 방식으로 데이터를 효율적으로 가공할 수 있어 코드의 가독성과 성능이 모두 향상됩니다.