머신러닝(MachineLearning)/판다스(Pandas)

DataFrame 결손 값 처리하기, apply lambda

Danny1231 2022. 7. 14. 14:27
  • 결손 데이터 처리하기
    판다스에서의 결손 데이터는 데이터가 없는 경우(Null)를 의미하며 이것을 넘파이의 NaN으로 표시한다. NaN값은 aggregation 함수의 연산과 머신러닝 알고리즘에서 제외되므로 이를 적용하기 전에 NaN을 다른 값으로 대체해야 한다. 
    DataFrame에서 isna()를 적용하면 모든 칼럼의 값이 NaN인지 아닌지를 True 또는 False 값으로 반환한다. 반환된 결과에 sum()함수를 호출하면 True값(NaN 값)을 1로 계산하여 총 몇 개의 행이 비어있는지를 구할 수 있다.
import pandas as pd
titanic_df = pd.read_csv('train.csv')
print(titanic_df.isna().sum())
titanic_df.head(2)

실행 결과

실행 결과로 Age, Cabin, Embarked열에 각각 177, 687, 2개의 결손 데이터가 있음을 알 수 있다. 이러한 결손 데이터는 fillna()를 이용하여 다른 값으로 대체할 수 있다. 

# Age열의 NaN값을 Age열의 평균값으로 대체
titanic_df['Age'] = titanic_df['Age'].fillna(titanic_df['Age'].mean())
# Cabin열의 NaN값을 C000으로 대체
titanic_df['Cabin'] = titanic_df['Cabin'].fillna('C000')
# Embarked열의 NaN값을 S로 대체
titanic_df['Embarked'] = titanic_df['Embarked'].fillna('S')
# NaN값이 존재하는지 확인
print(titanic_df.isna().sum())
titanic_df.head(2)

실행 결과

실행 결과로 Cabin열의 첫째 행의 데이터가 NaN에서 C000으로 대체된 것을 확인할 수 있다.

 

  • apply lambda식을 이용하여 데이터 가공하기
    파이썬에서의 lambda식은 별도의 함수 이름을 선언하지 않고도 사용자 정의 함수를 사용할 수 있는 식이다. 예를 들어 다음과 같이 lambda식을 사용하여 어떤 값을 10으로 나눈 나머지를 구할 수 있다.
# 함수를 정의하여 사용한 경우
def remainder_10(x):
	return x%10
print('99를 10으로 나눈 나머지:', remainder_10(99))

# lambda식을 사용한 경우
lambda_remainder = lambda x : x%10
print('99를 10으로 나눈 나머지:', lambda_remainder(99))

 실행 결과

99를 10으로 나눈 나머지: 9
99를 10으로 나눈 나머지: 9

DataFrame의 apply함수에 lambda식을 적용하여 새로운 열을 만들거나 열 값을 수정할 수 있다. 

# Cabin열에 Cabin의 첫 글자만 저장하기
titanic_df['Cabin'] = titanic_df['Cabin'].apply(lambda x : x[0])
# Age열의 값이 10미만이면 baby, 10 이상 20미만이면 teenager, 이외에는 adult로 저장하기
titanic_df['Age'] = titanic_df['Age'].apply(lambda x : 
	'baby' if x<10 else ('teenager' if x<20 else 'adult'))
                    
titanic_df.head()

실행 결과