본문 바로가기
Python/Pandas

[파이썬 Pandas] 6. 데이터 결측치 처리와 정렬방법

by Delants 2022. 8. 16.

# 본 내용은 " [나도코딩] - 파이썬 활용편(5) 데이터분석 및 시각화 " 강의를 듣고, 복습하고 공부한 내용을 다루었습니다.

오늘 포스팅할 내용은 다음과 같습니다.

 

Pandas #6. 데이터 결측치 처리와 정렬방법

10. 결측치

11. 데이터 정렬

 

=> 데이터의 결측치 처리 방법, 정렬 방법에 대한 학습을 진행합니다.


10. 결측치

처리작업에 들어가기 전 먼저 데이터를 임포트 시켜줍니다.

참고로, 데이터셋에 결측치가 얼마나 있는지 여부는 .info()를 활용해 볼 수 있습니다.

다음 글을 참고해 주세요.

https://dtandard.tistory.com/9?category=1031996 

 

[파이썬 Pandas] 3. 데이터 확인

# 본 내용은 " [나도코딩] - 파이썬 활용편(5) 데이터분석 및 시각화 " 강의를 듣고, 복습하고 공부한 내용을 다루었습니다. 오늘 포스팅할 내용은 다음과 같습니다. Pandas #3. 데이터 확인 05. 데이

dtandard.tistory.com

 

10-1. 결측치 데이터 채우기 "fillna()"

위 표를 보시면 SW특기 칼럼에서 몇몇 행들은 결측치 (NaN)로 되어 있는 것을 보실 수 있습니다.

데이터를 정상적으로 처리하려면 결측치를 알맞게 채워넣어야 하는데, 이 경우 사용하는 함수가 바로 fillna()입니다.

fillna()는 결측치를 어떤 문자로 처리하겠다는 함수로서,

fillna(' ')의 경우 공백으로 채울 수도 있고, fillna('결측치')라고 적는다면 결측치로 채울 수도 있습니다.

다음 예시를 보겠습니다.

위 데이터셋은 임시 데이터셋에 저장되는 것이므로, 실데이터셋에 저장하기 위해서는 다음과 같이 inplace속성을 추가해 줍니다.

df.fillna(' ', inplace=True)

 

 

하지만 위 방법은 해당 데이터셋 전체에 대해 적용되는 것입니다. 그러므로 특정 칼럼에만 적용시키고자 할 경우에는 적절하지 않을 수 있습니다. 그럴 경우에는 다음과 같이 특정 칼럼을 지정하여 fillna()함수를 사용할 수 있습니다.

df['SW특기'].fillna('확인 중', inplace=True)

10-2. 결측치 데이터 제외하기 "dropna()"

결측치를 처리하다보면 데이터를 채워야할 경우도 있지만, 제외해야할 경우도 있습니다.

이럴 경우 사용하는 것이 바로 dropna()함수가 되겠습니다.

 

기본형으로는 df.dropna()를 사용하면, 전체 데이터에서 결측값을 하나라도 포함한 행을 모두 삭제합니다.

추가로, axis속성이 있습니다. axis속성에는 index(행 삭제)와 columns(열 삭제)로 구분됩니다.

또한 how속성도 있습니다. how속성에는 any(데이터 중 하나라도 NaN이 있으면 삭제)와 all(행 혹은 열 전체가 NaN이면 삭제)로 구분됩니다.

보통 axis속성과 how속성을 같이 사용하는 경우가 많습니다.

how 속성만 사용하고, 그 값으로 any를 사용한다면, 다음과 같이 전체가 다 날아가 버릴 수 있기 때문입니다. (sw특기 칼럼에 결측이 존재하므로 이를 삭제해 버림)

예를 들어, NaN이 하나라도 있는 행을 삭제할 경우, 

위와 같이 axis=index (행 삭제), how=any(NaN이 하나라도 있다면) 속성을 사용해 기존 NaN이 존재했던 데이터가 삭제되었습니다. axis=column, how=any를 한다면 그 열이 삭제가 되겠지요. 즉 sw특기라는 칼럼이 삭제가 될 것입니다.

how=any속성은 결측이 하나라도 있으면 그 열을 삭제하는 옵션이기 때문입니다.

 

하지만 how=all은 다릅니다. 이 경우에 axis=column, how=all을 하면 삭제되지 않습니다.

참고로 how=all은 그 열이 전부 결측일 경우 삭제됩니다.

위 표는 결측이 아닌 값도 존재하므로, 삭제되지 않게 됩니다.

즉 다음과 같이 정상적으로 표시됩니다.


11. 데이터 정렬

다음으로 데이터 정렬에 대해 살펴보도록 하겠습니다.

데이터 정렬은 문자, 혹은 숫자로 된 데이터를 가나~/하파~ 순서대로 보고싶다거나, 숫자가 큰/작은 순서대로 보고 싶을 경우 사용됩니다.

 

11-1. sort_values()함수를 사용해 정렬하기

데이터를 정렬하는데 주로 쓰이는 함수는 바로 sort_values()함수입니다.

위 데이터 프레임에서 바로 확인해 보겠습니다.

 

아래처럼 키 기준 오름차순 정렬을 하고 싶다면 칼럼명만 적어주면 됩니다. 기본값은 오름차순 정렬이기 때문입니다.

하지만 내림차순 정렬을 해야할 때는 다음과 같이 ascending=False라는 속성을 추가해 줍니다.

또한, 리스트를 사용해 두 개 이상의 정렬을 요할때도 사용할 수 있습니다.

우선시되는 정렬을 먼저 적고, 그 값이 동점일 경우 활용할 정렬요소를 다음에 적습니다.

즉, 예를들면 수학점수를 기준으로 먼저 내림차순 정렬하되, 수학점수가 동점일 경우 영어성적을 기준으로 내림차순 정렬을 하겠다와 같은 경우라고 볼 수 있는데요. 한번 그 코드와 결과값을 보겠습니다.

df.sort_values(['수학', '영어'], ascending = False)
여기서 오름차순 정렬을 하고 싶다면 ascending속성은 삭제해 주세요.

만일 정렬을 하다보면 다음과 같은 경우가 생길 수 있습니다.

수학점수는 오름차순, 수학점수가 동점일 경우 영어 점수는 내림차순 정렬을 하고 싶은 경우처럼 말이죠.

이 경우에는 ascending속성에도 리스트로 감싸주어 앞의 칼럼과 대응되게 적어주시면 됩니다.

코드와 그 결과값을 보겠습니다.

df.sort_values(['수학','영어'], ascending=[True, False])
수학은 ascending=True, 즉 오름차순으로 기본적으로 정렬하되, 수학이 동점일 경우에는 영어점수를 기준으로 ascending=False, 즉 내림차순 정렬을 한다는 코드입니다. 

 

11-2. sort_index()함수를 사용해 정렬하기

sort_index()함수를 사용하면 인덱스를 오름차순(기본값) 혹은 내림차순으로 정렬할 수 있게 됩니다.


오늘은 데이터 결측치를 처리하는 방법과 정렬 방법에 대해 학습하였습니다.

가공되지 않은 데이터는 결측치가 존재할 수 있습니다. 공공데이터만 봐도 군데군데 결측치가 존재함을 알 수 있습니다.

그렇기에 데이터를 어떻게 처리하는지가 매우 중요합니다. 해당 결측치를 없앨 수도 있고, 다른 값으로 대체할 수도 있습니다. 그것을 어떻게 하느냐에 따라 처리결과가 확연히 달라지니까 말이지요.

또한 데이터를 정렬하는 것도 좀 더 직관적으로 보기 위해서는 필수라고 생각합니다.

아무렇게나 흩어진 데이터를 잘 모아서 보기 쉽게 만들어주므로 데이터를 서칭할 경우 매우 유용하게 쓰일 수 있겠네요.

 

다음 학습 내용 (Pandas #7)
12 데이터 수정

감사합니다.

댓글