root@bskyvision: ~#
방명록
태그
RSS

<닫기>

3,562,156/3,854/1,660

프로필사진
수많은 소음 속에서 신호를 찾아가는 bskyvision입니다.


<닫기>

  • 꼬장이이(가) 07.25에 작성한 댓글: test.

<닫기>

2022-07-22 20:16:17

판다스 데이터프레임에서 NaN 값이 있는 행 또는 열을 삭제할 때는 dropna() 메소드를 사용할 수 있습니다. NaN 값을 포함하고 있는 planets 데이터셋을 선택하여 dropna() 메소드를 사용했을 때의 결과를 보여드리도록 하겠습니다. 

 

planets 데이터셋은 seaborn에서 제공합니다. info() 메소드로 컬럼별로 몇 개의 NaN이 아닌 데이터가 들어 있는지 확인해보겠습니다. 

 

관련 글 - [pandas] 각 컬럼 데이터 중 NaN이 아닌 데이터의 개수를 보여주는 info() 메소드

 

import seaborn as sns
import pandas as pd

dataset = sns.load_dataset('planets')
print(dataset.info())

 

 

총 1305개의 행과 6개의 컬럼으로 이뤄진 데이터셋이고, method, number, year 컬럼은 결측치가 없습니다. 반면 orbital_period, mass, distance 컬럼은 결측치가 있는 상황입니다. 

 

dropna() 메소드로 결측치 있는 행 모두 제거하기

dropna() 메소드로 결측치가 하나라도 있는 행들을 제거해보도록 하겠습니다. dropna() 메소드의 사용법은 다음과 같습니다.

 

데이터프레임.dropna()

# 또는

데이터프레임.dropna(axis=0)

 

코드는 다음과 같습니다.

 

import seaborn as sns
import pandas as pd

dataset = sns.load_dataset('planets')
print(dataset.info())

dataset_NaN_deleted = dataset.dropna()
print(dataset_NaN_deleted.info())

 

 

NaN이 하나라도 있는 행을 제거했더니 498개의 행만 살아남은 것을 확인하실 수 있습니다. 특성 데이터 6개가 온전히 다 있는 행은 498개 행 뿐이었던 것입니다. 

 

dropna() 메소드로 결측치 있는 열 모두 제거하기

이번에는 NaN 값이 있는 컬럼을 모두 제거해보겠습니다. NaN 값을 포함하고 있는 컬럼들인 orbital_period, mass, distance이 제거되면 되겠죠? 사용법은 다음과 같습니다. 이번에는 dropna() 메소드의 매개변수 axis가 1이 되어야 합니다. 

 

데이터프레임.dropna(axis=1)

 

import seaborn as sns
import pandas as pd

dataset = sns.load_dataset('planets')
print(dataset.info())

dataset_NaN_deleted = dataset.dropna(axis=1)
print(dataset_NaN_deleted.info())

 

 

예상했듯이 3개의 컬럼만 살아남고 나머지 컬럼은 모두 제거된 것을 확인할 수 있습니다. 

 

결측치가 있는 경우 행과 열 중에 어떤 것을 삭제하는 것이 나은가?

데이터에 결측치가 있는 경우에 어떤 알고리즘을 훈련시키려면 결측치가 있는 행이나 열을 제거해야 합니다.

 

1) 샘플의 개수를 많이 남기려면, NaN이 있는 열을 제거하는 것이 낫습니다. 샘플의 개수는 유지되지만, 특성 개수는 줄어들 것입니다.

 

2) 특성의 개수를 많이 남기려면, NaN이 있는 행을 제거하는 것이 낫습니다. 특성의 개수는 유지되지만, 샘플 개수는 줄어들 것입니다. 

이름
비밀번호
홈페이지
비밀여부