본문 바로가기
Big Data/DataAnalysis & Manipulate

Pandas에서 결측값을 다루기 위한 여러 함수

by Wikinist 2023. 8. 11.

Pandas는 Python에서 데이터 조작 및 분석을 위한 강력한 라이브러리입니다. 결측값(missing values)은 데이터셋에서 누락된 값이나 비어있는 값을 의미합니다. Pandas는 결측값을 다루기 위한 여러 함수와 메서드를 제공합니다. 아래에는 몇 가지 주요한 결측값 관련 함수들과 그 설명을 제공합니다.

isna() / isnull()

DataFrame.isna(), Series.isna(), DataFrame.isnull(), Series.isnull()


각 요소가 결측값인지를 불리언 형태로 반환합니다. True는 결측값을 나타내고, False는 결측값이 아님을 나타냅니다.

notna() / notnull()

DataFrame.notna(), Series.notna(), DataFrame.notnull(), Series.notnull()


각 요소가 결측값이 아닌지를 불리언 형태로 반환합니다. True는 결측값이 아니고, False는 결측값임을 나타냅니다.

dropna()

DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)


결측값을 포함한 행 또는 열을 제거합니다.

axis (기본값: 0)

결측치를 제거할 축을 지정합니다. 0은 행(row)을 기준으로 결측치를 제거하고, 1은 열(column)을 기준으로 결측치를 제거합니다.

how (기본값: 'any')

결측치 제거 방법을 지정합니다. 다음 옵션이 있습니다:
'any': 해당 축(axis)에서 하나 이상의 결측치가 있는 경우 해당 행 또는 열을 제거합니다.
'all': 해당 축(axis)에서 모든 값이 결측치인 경우에만 해당 행 또는 열을 제거합니다.

thresh

유효한(non-null) 값의 최소 개수를 지정합니다. 이 개수보다 적은 유효한 값이 있는 행 또는 열은 제거됩니다.

subset

결측치를 검사할 열(들)을 지정합니다. 리스트 형태로 지정하며, 주어진 열들 중 하나라도 결측치가 있는 행이나 열을 제거합니다.

inplace (기본값: False)

True로 설정하면 원본 데이터프레임을 수정하고 아무 값도 반환하지 않습니다. False로 설정하면 결측치가 제거된 새로운 데이터프레임을 반환합니다.

사용 예시

이와 같이 dropna 함수는 데이터프레임이나 시리즈 내의 결측치를 처리하고, 원하는 방식으로 데이터를 정리하는 데 사용됩니다.

fillna()

DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None)


결측값을 지정한 값이나 방법으로 대체합니다.
value: 결측값을 대체할 값입니다.
method: 'ffill' 또는 'pad'는 앞쪽의 값으로 대체하고, 'bfill' 또는 'backfill'은 뒷쪽의 값으로 대체합니다.
axis: 대체를 수행할 축을 지정합니다.
inplace: True로 설정하면 기존 DataFrame을 수정하고, False로 설정하면 새로운 DataFrame을 반환합니다.
limit: 대체할 최대 연속적인 결측값의 개수를 지정합니다.

replace()

DataFrame.replace(to_replace=None, value=None, inplace=False, limit=None, regex=False, method='pad')


특정 값을 다른 값으로 대체합니다. (결측값을 다른 값으로 대체하는 데에도 활용 가능)
to_replace: 대체하려는 값 또는 값의 리스트 또는 딕셔너리입니다.
value: to_replace에 지정된 값을 대체할 값입니다.
inplace: True로 설정하면 기존 DataFrame을 수정하고, False로 설정하면 새로운 DataFrame을 반환합니다.
method: 'pad' 또는 'ffill'은 앞쪽의 값으로 대체하고, 'backfill' 또는 'bfill'은 뒷쪽의 값으로 대체합니다.

interpolate()

DataFrame.interpolate(method='linear', axis=0, limit=None, inplace=False, limit_direction='forward', limit_area=None, downcast=None)


결측값을 보간하여 대체합니다. 주로 수치 데이터에 사용됩니다.
method: 보간 방법을 지정합니다. 'linear' (기본값)은 선형 보간을 의미합니다.
axis: 대체를 수행할 축을 지정합니다.
limit: 보간할 최대 연속적인 결측값의 개수를 지정합니다.
inplace: True로 설정하면 기존 DataFrame을 수정하고, False로 설정하면 새로운 DataFrame을 반환합니다.

method에 대한 추가 설명

interpolate() 함수의 method 매개변수는 결측값을 보간할 때 사용할 보간 방법을 지정하는 데에 사용됩니다. 다양한 보간 방법을 선택하여 데이터를 보간할 수 있습니다. 아래에는 주요한 보간 방법들에 대한 설명을 제공합니다.

'linear' (기본값)

선형 보간을 수행합니다. 결측값 주변의 값들을 사용하여 선형적으로 보간합니다.

'time'

시계열 데이터에서 사용하기 적합한 시간 기반 보간 방법입니다. 시간 간격을 기반으로 선형 보간합니다.

'index'

인덱스 값을 기반으로 선형 보간합니다. 인덱스가 정렬되어 있는 경우 유용합니다.

'values'

데이터 값 자체를 기반으로 선형 보간합니다. 데이터 간의 거리에 따라 보간합니다.

'quadratic'

2차 다항식을 사용하여 보간합니다. 이전, 현재, 다음 데이터 포인트를 고려하여 2차 곡선을 그립니다.

'cubic'

3차 다항식을 사용하여 보간합니다. 이전, 현재, 다음 데이터 포인트를 고려하여 3차 곡선을 그립니다.

'polynomial'

주어진 차수의 다항식을 사용하여 보간합니다. order 매개변수로 다항식의 차수를 지정해야 합니다.

'spline'

스플라인 보간을 수행합니다. 데이터를 여러 개의 조각으로 나누고 각 조각마다 다항식을 적용하여 부드럽게 보간합니다.

'barycentric'

바리센트릭 보간을 수행합니다. 삼각형 분할에 바탕을 둔 복잡한 방법으로 보간합니다.

'krogh'

크로흐 보간을 수행합니다. 이웃한 데이터 포인트를 고려하여 부드러운 곡선을 그립니다.

'piecewise_polynomial'

구간별로 다항식을 사용하여 보간합니다. order와 n 매개변수로 다항식의 차수와 구간의 수를 지정해야 합니다.

'spline'

스플라인 보간을 수행합니다. 다항식 조각으로 나눠서 부드럽게 보간합니다.

dropna() (Series)

Series.dropna(axis=0, inplace=False, level=None, errors='raise')


Series 객체에서 결측값을 제거합니다.
axis: 결측값을 제거할 축을 지정합니다.
inplace: True로 설정하면 기존 Series를 수정하고, False로 설정하면 새로운 Series를 반환합니다.

fillna() (Series)

Series.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)


Series 객체에서 결측값을 지정한 값이나 방법으로 대체합니다.
value: 결측값을 대체할 값입니다.
method: 'ffill' 또는 'pad'는 앞쪽의 값으로 대체하고, 'bfill' 또는 'backfill'은 뒷쪽의 값으로 대체합니다.
axis: 대체를 수행할 축을 지정합니다.
inplace: True로 설정하면 기존 Series를 수정하고, False로 설정하면 새로운 Series를 반환합니다.

Pandas의 모든 함수에 대한 더 자세한 내용과 사용 예시는 공식 문서를 참조하시기 바랍니다.

해당 게시글은 ChatGPT의 도움을 받아 작성되었습니다.

'Big Data > DataAnalysis & Manipulate' 카테고리의 다른 글

pd.pivot_table()  (0) 2023.08.16
pandas 결측값 처리  (0) 2023.08.15
DataFrame 열 위치 변경  (0) 2023.08.11
explode()와 melt() 그리고 Wide->Long 포맷 변환  (0) 2023.08.11
pandas series.str  (0) 2023.08.11