본문 바로가기

빅데이터(Big Data) 이론과 코드/2. 데이터 전처리

Pandas Dataframe 조건에 맞게 값 변경 하기

데이터 전처리를 하다 보면 특정 열이나 행에 대해서

원하는 조건에 맞게 값을 변경해야 할 때가 있습니다.

 

판다스에서 이를 위해 사용할 수 있는  loc, boolean, apply(lambda) 세(3) 가지 방식에 대해 알아봅니다.

 

 

방법 1. loc 사용하기 

 

df 데이터 프레임에서 satisfaction 열은 범주형(Categorical)입니다.

값은 'dissatisfied', 'satisfaction' 두 가지 범주가 있습니다.

 

이 두 값들을 숫자형 0과 1로 변환해주는 작업을 하려고 합니다.

label encoder도 있지만 pandas의 간단한 조건식을 이용해 인덱싱 하는 방법에 대해 알아봅니다.

 

df.loc[df['satisfaction'] == 'dissatisfied', 'satisfaction'] = 0
df.loc[df['satisfaction'] == 'satisfied', 'satisfaction'] = 1

 

예제 2

 

위의 데이터 프레임에서 만약  'dissatisfied', 'satisfaction'  범주 모두 해당되지 않을 때 (!= 같지 않다)

그 값을 0.5로 변환해주는 코드입니다.

# satisfaction 값이 'dissatisfied' 나 'satisfaction' 가 아니라면 satisfaction 는 '0.5'
df.loc[df['satisfaction'] != ('dissatisfied' or 'satisfaction') , 'satisfaction'] = '0.5'

 

방법 2. pandas boolean 값(True/False) 조건식 사용하기

두 번째 방법은 특정 열에 인덱싱으로 접근해서 해당 값이 'dissatisfied', 'satisfaction'  인지 아닌지 확인하는 방식입니다.

확인된 결과는 True/False로 메모리에 기록이 되고, 해당되는 열에 원하는 값 0과 1을 재입력하는 방식입니다.

df['satisfaction'][(df['satisfaction'] == 'dissatisfied')] = 0
df['satisfaction'][(df['satisfaction'] == 'satisfied')] = 1

 

 

방법 3. apply 함수를 이용해 조건식을 입력(추천)

apply함수는 조건이 여러 개 이거나 복잡할 때 더 효과적으로 사용할 수 있습니다.

예를 들어 조건이 2개라면 아래와 같이 앞의 순서대로 if와 else를 연속해서 작성할 수가 있습니다.

 

"x가 dissatisfied 이면 0을 넣어라.  아니면(ssatisfied) 1을 넣어라"

이런 식으로 계속 조건을 이어서 쓸 수 있는 장점이 있습니다.

 

df["satisfaction"] = df["satisfaction"].apply(lambda x: 0 if x == "dissatisfied" else 1)

 

결론적으로 apply 함수와 lambda를 이용하면
연산속도와 코드 간결성 측면에서 월등히 좋습니다.
반응형
LIST