데이터 분석을 할 때 결측치(NaN)는 흔히 발생하는 문제 중 하나입니다. 결측치는 잘못된 분석 결과를 초래할 수 있기 때문에, 이를 적절하게 처리하는 것이 중요합니다. Pandas는 다양한 결측치 처리 기능을 제공하여 데이터를 정제하고 분석의 정확성을 높일 수 있습니다. 이번 포스팅에서는 Pandas에서 결측치를 처리하는 여러 방법을 예시 코드와 함께 소개하겠습니다.
1. 결측치 확인하기
먼저, 결측치를 처리하기 전에 데이터셋에서 결측치가 있는지 확인해야 합니다. isnull() 메서드를 사용하여 데이터프레임 내의 결측치를 확인할 수 있습니다.
이름 나이 점수
0 Alice 24.000000 85.0
1 Bob 23.666667 90.0
2 Charlie 22.000000 50.0
3 Unknown 25.000000 88.0
3. 이전/다음 값으로 채우기 (method 옵션)
이전 값이나 다음 값으로 결측치를 채울 수 있습니다.
# 앞의 값으로 채우기 (forward fill)df_fillna_ffill = df.fillna(method='ffill')print(df_fillna_ffill)
이름 나이 점수
0 Alice 24.0 85.0
1 Bob 24.0 90.0
2 Charlie 22.0 90.0
3 Charlie 25.0 88.0
/tmp/ipykernel_3503/2037641207.py:2: FutureWarning:
DataFrame.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.
# 뒤의 값으로 채우기 (backward fill)df_fillna_bfill = df.fillna(method='bfill')print(df_fillna_bfill)
이름 나이 점수
0 Alice 24.0 85.0
1 Bob 22.0 90.0
2 Charlie 22.0 88.0
3 None 25.0 88.0
/tmp/ipykernel_3503/3685907030.py:2: FutureWarning:
DataFrame.fillna with 'method' is deprecated and will raise in a future version. Use obj.ffill() or obj.bfill() instead.
4. 결측치 대체하기
replace() 메서드
특정 값을 다른 값으로 대체할 때 사용합니다. 결측치뿐만 아니라 다른 값도 대체할 수 있습니다.
이름 나이 점수
0 Alice 24.0 85.0
1 Robert NaN 90.0
2 Charlie 22.0 NaN
3 None 25.0 88.0
결측치를 특정 값으로 대체할 수도 있습니다.
# NaN을 0으로 대체df_replace_nan = df.replace({None: 'Unknown'})print(df_replace_nan)
이름 나이 점수
0 Alice 24.0 85.0
1 Bob NaN 90.0
2 Charlie 22.0 NaN
3 Unknown 25.0 88.0
5. 결측치 보간하기
interpolate() 메서드
숫자 데이터를 가진 컬럼에서 결측치를 선형 보간법 등으로 채울 수 있습니다.
# 선형 보간법을 사용하여 결측치 채우기df_interpolate = df.interpolate()print(df_interpolate)
이름 나이 점수
0 Alice 24.0 85.0
1 Bob 23.0 90.0
2 Charlie 22.0 89.0
3 None 25.0 88.0
/tmp/ipykernel_3503/1832467942.py:2: FutureWarning:
DataFrame.interpolate with object dtype is deprecated and will raise in a future version. Call obj.infer_objects(copy=False) before interpolating instead.
보간 방법은 ‘linear’ 이외에도 다양한 옵션이 있습니다. pandas의 interpolate() 함수는 결측값(NaN)을 보간할 때 사용할 수 있는 다양한 보간 방법을 제공합니다. 주요 보간 방법은 다음과 같습니다.
method 파라미터 옵션
interpolate() 함수의 method 파라미터를 사용하여 다양한 보간 방법을 선택할 수 있습니다. 기본적인 보간 방법은 다음과 같습니다:
'linear' (기본값): 선형 보간입니다. 결측값 양쪽의 값을 직선으로 연결하여 중간 값을 계산합니다.
'time': 시간 데이터에 대해 선형 보간을 수행합니다. index 또는 column이 datetime 타입이어야 합니다.
'index': index를 기준으로 선형 보간을 수행합니다.
'pad' / 'ffill' (Forward Fill): 앞의 값으로 결측값을 채웁니다.
'backfill' / 'bfill': 뒤의 값으로 결측값을 채웁니다.
'nearest': 가장 가까운 값으로 결측값을 채웁니다.
'polynomial': 다항식 보간입니다. order 파라미터로 다항식의 차수를 지정해야 합니다. 예를 들어, method='polynomial', order=2는 2차 다항식 보간입니다.
기타 파라미터
limit: 연속된 결측값의 보간 가능 최대 개수를 지정합니다.
limit_direction: 'forward', 'backward', 'both'로 보간의 방향을 지정합니다.
limit_area: 'inside', 'outside'로 보간이 이루어지는 영역을 제한합니다.