
데이터 전처리를 하다 보면 특정 열이나 행에 대해서
원하는 조건에 맞게 값을 변경해야 할 때가 있습니다.
판다스에서 이를 위해 사용할 수 있는 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를 이용하면
연산속도와 코드 간결성 측면에서 월등히 좋습니다.
'빅데이터(Big Data) 이론과 코드 > 2. 데이터 전처리' 카테고리의 다른 글
홈런볼 매출 데이터 분석 Bar Chart Race (1) | 2023.02.05 |
---|---|
[zip 함수] 파이썬 내장함수 zip() (0) | 2022.03.03 |
로그변환에 np.log1p()을 사용하는 이유 (0) | 2021.12.01 |