Pandas apply 메서드는 pandas 내에서 가장 많이 사용되는 함수 중 하나이고, 사용자가 정의한 함수와 함께 사용할 수 있어서 데이터 전처리 등에 응용하여 사용할 수 있다. 사용자 정의 함수가 필요한 이유는 Pandas에 우리가 원하는 모든 함수가 구현되어 있지는 않기 때문에 직접 구현해서 사용해야 하는 경우가 있기 때문이다. 이 글에서는 apply
메서드에 대해 알아본다.
Series.apply()
사용법
Input 으로 series를 넣으면 알아서 데이터 단위로 함수를 정의하고 Output으로 series를 리턴한다.
기본 구조는 다음과 같다.
df['new'] = df['col'].apply(lambda x: x)
df['col']
: Input(Series), 함수를 적용할 serieslambda x
: Input(Data), 함수가 적용될 때 사용할 변수x
: Output(Data), 반환되는 series내 Data 단위df['new']
: Output(Series), Output으로 series가 return
위 코드는 똑같은 리스트 또는 Series 복제하기를 수행한다.
apply
를 이용한 사칙연산
아래와 같이 하나의 컬럼에 사칙연산을 하여 새로운 컬럼을 추가해 본다.
df['Next_Year_Age1'] = df['Age'] + 1
df['Next_Year_Age2'] = df['Age'].apply(lambda x: x+1)
apply
를 이용한 형변환
df['Str_Age1'] = df['Age'].astype('str')
df['Str_Age2'] = df['Age'].apply(lambda x: str(x))
apply
X list
apply
함수만 이용하여 Name을 모두 대문자로 뽑아내기
df['Upper_Name'] = df['Name'].apply(lambda x: x.upper())
apply
에 사용자 함수 적용
apply
에 사용자가 정의한 함수(function)을 적용할 수 있다. 다음은 그 기본 형태이다.
def user_function(x):
....
return result
df['New'] = df['Col'].apply(lambda x: user_function(x))
return 값은 apply
가 호출한 곳 Output으로 반환된다.
def gender_str(x):
return 'Male' if x == 'M' else 'Female'
df['New_Gender'] = df['Gender'].apply(lambda x: gender_str(x))
DataFrame.apply()
사용법
기본 구조는 다음과 같다.
df['new_col'] = df.apply(lambda row: function(row), axis=1)
df.apply
: 함수(function
)을 적용할 데이터프레임lambda row
: 함수(function
)을 적용할 rowfunction(row)
: 적용할 함수(function
)axies=1
: 축df['new_col']
: Output(Series)
axis
가 필요한 이유
Series는 1차원이라 순회할 방향이 한 군데이지만, Dataframe은 2차원이라, x/y로 갈 수 있어 축을 지정해 줘야 한다.
def concatenate(value_1, value_2):
return str(value_1)+ "-" + str(value_2)
df['Concatenate'] = df[['Name','Age']].apply(
lambda row: concatenate(row['Name'], row['Age']) , axis=1)