Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python Pandas – fillna()로 누락된 열 값을 중앙값으로 채우기

중앙값(median)은 데이터를 정렬했을 때 정확히 가운데 위치하는 값으로, 데이터의 상위 절반과 하위 절반을 구분하는 기준이 됩니다. Pandas에서는 fillna() 메서드에 중앙값을 지정하기만 하면 누락된(NaN) 열 값을 간단하게 중앙값으로 채울 수 있습니다.

먼저 필요한 라이브러리를 별칭(alias)과 함께 가져옵니다.

import pandas as pd
import numpy as np

두 개의 열('Car', 'Units')을 가진 DataFrame을 생성합니다. 이때 NumPy의 np.NaN을 사용해 의도적으로 결측치를 포함시켰습니다.

dataFrame = pd.DataFrame(
    {
        "Car": ['Lexus', 'BMW', 'Audi', 'Bentley', 'Mustang', 'Tesla'],
        "Units": [100, 150, np.NaN, 80, np.NaN, np.NaN]
    }
)

결측치가 있는 'Units' 열의 중앙값을 구한 뒤, 그 열에 위치한 NaN 값들을 해당 열의 중앙값으로 대체합니다. median() 함수를 활용하면 됩니다.

dataFrame.fillna(dataFrame['Units'].median(), inplace=True)

전체 예제 코드

다음은 지금까지의 내용을 정리한 전체 코드입니다.

import pandas as pd
import numpy as np

# DataFrame 생성
dataFrame = pd.DataFrame(
    {
        "Car": ['Lexus', 'BMW', 'Audi', 'Bentley', 'Mustang', 'Tesla'],
        "Units": [100, 150, np.NaN, 80, np.NaN, np.NaN]
    }
)

print("DataFrame ...\n", dataFrame)

# NaN이 있는 'Units' 열의 중앙값을 계산하여 결측치 대체
dataFrame.fillna(dataFrame['Units'].median(), inplace=True)

print("\n중앙값으로 NaN을 채운 후 업데이트된 DataFrame...\n", dataFrame)

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

DataFrame ...
      Car   Units
0    Lexus   100.0
1      BMW   150.0
2     Audi     NaN
3  Bentley    80.0
4  Mustang     NaN
5    Tesla     NaN

중앙값으로 NaN을 채운 후 업데이트된 DataFrame...
      Car   Units
0    Lexus   100.0
1      BMW   150.0
2     Audi   100.0
3  Bentley    80.0
4  Mustang   100.0
5    Tesla   100.0

동작 원리 살펴보기

'Units' 열에서 실제 유효한 값은 100, 150, 80 세 개입니다(결측치 제외). 이 값들을 오름차순으로 정렬하면 80, 100, 150이 되며, 정확히 가운데 있는 100이 중앙값이 됩니다. 따라서 세 개의 NaN이 모두 100.0으로 채워진 것을 확인할 수 있습니다.

참고로 최신 버전의 Pandas에서는 inplace=True 대신 아래처럼 결과를 변수에 다시 할당하는 방식이 권장됩니다.

dataFrame = dataFrame.fillna(dataFrame['Units'].median())