반응형
ChatGPT로 Python pandas 알아보기 (7):결측치 처리
결측치 확인:isna() / isnull()
데이터에 결측치가 있는지 확인하는 방법은 isna() 혹은 isnull() 메서드를 사용할 수 있다.
이 두 메서드는 데이터프레임 내의 각 원소가 결측치인지 아닌지를 불리언(Boolean) 형태로 표시해준다.
이 두 메서드는 데이터프레임 내의 각 원소가 결측치인지 아닌지를 불리언(Boolean) 형태로 표시해준다.
✔ isna()
# 결측치 확인 isna()
df.isna()
▶ 출력 결과
# 나이에 결측치가 있는 데이터만 확인
df[df['나이'].isna()
▶ 출력 결과
✔ isnull()
# 결측치 확인 isna()
df.isnull()
▶ 출력 결과
isna와 isnull 이 두 메서드는 기능적으로 동일하며, 서로 다른 이름으로 같은 기능을 제공한다.
pandas는 사용자의 편의를 위해 이렇게 두 가지 이름으로 동일한 기능을 제공한다고 한다.
어떤 사람들은 결측치를 'NA'라고 부르기 때문에 isna를 선호하고, 또 다른 사람들은 'null'이라는 용어를 사용하기 때문에 isnull을 선호해서 동일한 기능을 하지만 이름만 다르게 만든 것이라고 한다.
이후 예시에서는 모두 isna를 사용하겠다.
pandas는 사용자의 편의를 위해 이렇게 두 가지 이름으로 동일한 기능을 제공한다고 한다.
어떤 사람들은 결측치를 'NA'라고 부르기 때문에 isna를 선호하고, 또 다른 사람들은 'null'이라는 용어를 사용하기 때문에 isnull을 선호해서 동일한 기능을 하지만 이름만 다르게 만든 것이라고 한다.
이후 예시에서는 모두 isna를 사용하겠다.
✔ # 각 컬럼별 결측치 개수 확인
데이터프레임 내에서 결측치의 개수를 세는 경우, isna(isnull) 메서드를 사용한 후 sum 메서드를 추가적으로 사용할 수 있다.
데이터프레임 내에서 결측치의 개수를 세는 경우, isna(isnull) 메서드를 사용한 후 sum 메서드를 추가적으로 사용할 수 있다.
# 각 컬럼별 결측치 개수 확인
df.isna().sum()
▶ 출력 결과
✔ # 결측치가 있는 행만 선택
any(axis=1) 메서드를 사용해서 결측치가 있는 행만 선택할 수 있다.
any(axis=1) 메서드를 사용해서 결측치가 있는 행만 선택할 수 있다.
# 결측치가 있는 행만 선택
missing_rows = df[df.isna().any(axis=1)]
▶ 출력 결과
결측치 제거:dropna()
dropna 메서드는 DataFrame이나 Series에서 결측치를 포함하는 행이나 열을 제거하는데 사용된다.
dropna 메서드를 매개변수 없이 사용하면, 결측치를 포함하는 모든 행을 제거한다.
dropna 메서드를 매개변수 없이 사용하면, 결측치를 포함하는 모든 행을 제거한다.
# 결측치를 포함하는 행 제거
new_df = df.dropna()
▶ 출력 결과
✔ axis 매개변수
axis 매개변수를 사용하여 행(axis=0) 또는 열(axis=1)을 기준으로 결측치를 제거할 수 있다. (default=0)
axis 매개변수를 사용하여 행(axis=0) 또는 열(axis=1)을 기준으로 결측치를 제거할 수 있다. (default=0)
# 결측치를 포함하는 열 제거
new_df = df.dropna(axis=1)
▶ 출력 결과
✔ how 매개변수
how 매개변수는 'any' 또는 'all' 값을 가질 수 있으며, 결측치 제거 조건을 설정한다.
how 매개변수는 'any' 또는 'all' 값을 가질 수 있으며, 결측치 제거 조건을 설정한다.
any | 결측치가 하나라도 있는 행 또는 열을 제거 (기본값) |
---|---|
all | 모든 값이 결측치인 행 또는 열을 제거합니다. |
# 결측치가 하나라도 있는 행 제거
new_df = df.dropna(how='any')
▶ 출력 결과
# 모든 값이 결측치인 행만 제거
new_df = df.dropna(how='all')
▶ 출력 결과
✔ subset 매개변수
subset 매개변수를 사용하여 특정 열에 대해서만 결측치를 검사하고 제거할 수 있다.
subset 매개변수를 사용하여 특정 열에 대해서만 결측치를 검사하고 제거할 수 있다.
# '나이' 열에서 결측치를 포함하는 행만 제거
new_df = df.dropna(subset=['나이'])
▶ 출력 결과
✔ inplace 매개변수
inplace 매개변수를 True로 설정하면, 원본 DataFrame을 변경하고 새로운 DataFrame을 반환하지 않는다.
inplace 매개변수를 True로 설정하면, 원본 DataFrame을 변경하고 새로운 DataFrame을 반환하지 않는다.
# 원본 DataFrame 변경
df.dropna(inplace=True)
▶ 출력 결과
결측치 대체:fillna()
fillna는 DataFrame이나 Series에서 결측치 (NaN)를 특정 값으로 대체하는데 사용된다.
이 메서드는 데이터 정제 과정에서 결측치를 다루는 데 매우 유용하다.
결측치를 제거하는 대신, 이를 적절한 값으로 대체하여 데이터를 보존할 수 있다.
이 메서드는 데이터 정제 과정에서 결측치를 다루는 데 매우 유용하다.
결측치를 제거하는 대신, 이를 적절한 값으로 대체하여 데이터를 보존할 수 있다.
# 결측치를 0으로 대체
new_df = df.fillna(0)
▶ 출력 결과
✔ axis 매개변수
axis 매개변수를 사용하여 행(axis=0) 또는 열(axis=1)을 기준으로 결측치를 채울 방향을 지정할 수 있다. (Default=0)
axis 매개변수를 사용하여 행(axis=0) 또는 열(axis=1)을 기준으로 결측치를 채울 방향을 지정할 수 있다. (Default=0)
# 열 방향으로 이전 값으로 결측치 채우기
new_df = df.fillna(method='ffill', axis=1)
▶ 출력 결과
✔ method 매개변수
method 매개변수를 사용하여 결측치를 이전 값이나 다음 값으로 채울 수 있다.
method 매개변수를 사용하여 결측치를 이전 값이나 다음 값으로 채울 수 있다.
ffill | 이전 값 |
---|---|
bfill | 다음 값 |
# 이전 값으로 결측치 채우기
new_df = df.fillna(method='ffill')
▶ 출력 결과
# 다음 값으로 결측치 채우기
new_df = df.fillna(method='bfill')
▶ 출력 결과
✔ Dictionary 사용
열마다 다른 값을 사용하여 결측치를 대체하려면 dictionary를 사용할 수 있다.
dictionary의 키는 열 이름이고 값은 대체할 값이다.
열마다 다른 값을 사용하여 결측치를 대체하려면 dictionary를 사용할 수 있다.
dictionary의 키는 열 이름이고 값은 대체할 값이다.
# 열마다 다른 값으로 결측치 대체
values = {'나이': 30, '지역': '알 수 없음'}
new_df = df.fillna(values)
▶ 출력 결과
✔ limit 매개변수
limit 매개변수를 사용하여 연속적인 결측치를 대체하는 최대 횟수를 지정할 수 있다.
limit 매개변수를 사용하여 연속적인 결측치를 대체하는 최대 횟수를 지정할 수 있다.
# 최대 1개의 연속적인 결측치만 대체
new_df = df.fillna(0, limit=1)
▶ 출력 결과
✔ inplace 매개변수
inplace 매개변수를 True로 설정하면, 원본 DataFrame을 변경하고 새로운 DataFrame을 반환하지 않는다.
inplace 매개변수를 True로 설정하면, 원본 DataFrame을 변경하고 새로운 DataFrame을 반환하지 않는다.
# 원본 DataFrame 변경
df.fillna(0, inplace=True)
▶ 출력 결과
오늘은 pandas에서 결측치(na/nan/null)를 다루는 메서드들에 대해서 알아보았다.
메서드들은 알고 있는 것이 많았는데, isnull이 완전히 isna와 동일하다는 것은 이제서야 알게 됐다.
또 dropna와 fillna에 매개변수들도 다양한 것이 있다는 것도 이번에 알게 됐다.
글로 정리하면서 여러모로 재미있는 시간이었다.
메서드들은 알고 있는 것이 많았는데, isnull이 완전히 isna와 동일하다는 것은 이제서야 알게 됐다.
또 dropna와 fillna에 매개변수들도 다양한 것이 있다는 것도 이번에 알게 됐다.
글로 정리하면서 여러모로 재미있는 시간이었다.
반응형
'Python > Pandas' 카테고리의 다른 글
ChatGPT로 Python pandas 알아보기 (9) : 기초통계량 (4) | 2023.06.27 |
---|---|
ChatGPT로 Python pandas 알아보기 (8):데이터 병합 (6) | 2023.06.14 |
ChatGPT로 Python pandas 알아보기 (6):데이터 그룹화 및 집계 (0) | 2023.06.12 |
ChatGPT로 Python pandas 알아보기 (5):데이터 정렬 (4) | 2023.06.11 |
ChatGPT로 Python pandas 알아보기 (4):DataFrame method (3) | 2023.06.10 |
결측치(missing data)는 흔히 발생하는 문제로 이를 적절히 처리하지 않으면 분석 결과에 큰 영향을 미칠 수 있다.
이번 포스트에서 사용할 테스트 데이터는 아래와 같으며, nan을 사용하기 위해 numpy도 함께 import한다.