판다스는 결손데이터를 처리하는 api를 제공합니다.

여기서 결손 데이터란 칼럼에 값이 없는, null인 경우를 의미하며, 넘파이에서는 NaN으로 표시됩니다.

데이터를 분석하기 위해서는 이 결손 데이터 처리가 필요한데, 경우에 따라 결손데이터를 포함하는 행을 없앨 수도 있고, 중간값 또는 평균값으로 대체가 필요한 경우도 있습니다.

 

 

 

- isna() : 데이터가 NaN인지 확인하는 함수입니다. 결과는 True, False로 True인 경우 결손 데이터가 있다는 의미입니다.

titanic_df.isna().head(3)

 

titanic_df.isna().sum()

- 결손 데이터에 대한 sum을 하게 되면 True가 1로 계산되어 합이 나오게 됩니다. 즉 0이 아닌 값을 가지면 그 수만큼 결손 데이터가 존재한다는 의미입니다.

 

 

- fillna() : 결손 데이터를 편리하게 다른 값으로 대체할 수 있는 함수

titanic_df['Cabin'] = titanic_df['Cabin'].fillna('C000')
titanic_df.head(3)

- 'Cabin'은 결손 데이터가 많은 칼럼으로 na, 즉 결손 데이터인 경우 모두 'C000'으로 대체 된 것으로 확인 할 수 있습니다.

 

titanic_df['Age'] = titanic_df['Age'].fillna(titanic_df['Age'].mean())

- 'Age'의 칼럼은 결손 데이터가 있을 시 'Age' 칼럼의 평균을 대체하는 것입니다.

 

 

- apply lambda : apply 함수와 lambda가 결합해 DataFrame이나 Series의 레코드별로 데이터를 가공하는 기능 제공 

def get_square(a):
	return a**2
    
print('3의 제곱은 ', get_square(3))

 

lambda_square = lambda x: x**2
print('3의 제곱은 ', lambda_square(3))

- lambda x : x**2 : 반환(리턴)값은 x로 계산은 : 이후 식으로 , 식을 계산한 x로 반환하게 된다.

 

titanic_df['Name_len'] = titanic_df['Name'].apply(lambda x : len(x))

- 이름의 길이를 'Name_len'이라는 컬럼을 만들어서 apply안 lambda 의 이름 길이에 대한 x 값을 넣어주게 된다.

titanic_df['child_adult'] = titanic_df['Age'].apply(lambda x : 'child' if x <= 15 else 'Adult')

- lambda 식에 있어서 ifelse를 쓰는 방법은 위 식과 같다.

우리가 아는 if는 [ if 조건식 : 실행문 ] 이지만 판다스에서 반대로 [ 실행문 if 조건 else 실행문 ]의 형태를 가지고 있다.

즉 x가 15보다 같거나작으면 'child' , 아니면 'adult'가 되게 된다.

+ Recent posts