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

Python Pandas에서 NaN 값을 평균으로 채우는 방법

Pandas에서 결측치(NaN)를 평균값으로 채우려면 mean() 함수와 fillna() 함수를 함께 사용하면 됩니다. 먼저 NaN이 포함된 열의 평균을 계산한 뒤, fillna()를 이용해 해당 열의 NaN 값을 그 평균으로 대체하는 방식입니다.

1. 필요한 라이브러리 불러오기

먼저 pandas와 numpy 라이브러리를 임포트합니다.

import pandas as pd
import numpy as np

2. NaN 값이 포함된 DataFrame 생성하기

두 개의 열(Car, Units)로 구성된 DataFrame을 만들고, numpy의 np.NaN을 사용해 일부 값에 NaN을 입력합니다.

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

3. 열의 평균 계산하기

NaN이 포함된 Units 열의 평균을 구합니다. 이 열의 유효한 값은 100, 150, 80이므로 평균은 다음과 같이 계산됩니다.

(100 + 150 + 80) / 3 = 110

meanVal = dataFrame['Units'].mean()

4. 평균값으로 NaN 채우기

fillna() 함수에 앞서 계산한 평균값을 전달하면, 해당 열에 있는 모든 NaN 값이 평균인 110으로 대체됩니다.

dataFrame['Units'] = dataFrame['Units'].fillna(value=meanVal)

참고: 최신 버전의 Pandas에서는 체인 인덱싱(chained indexing) 상태에서 inplace=True를 사용하면 의도대로 동작하지 않거나 경고가 발생할 수 있습니다. 따라서 위 코드처럼 결과를 다시 할당하는 방식을 사용하는 것이 더 안전하고 권장됩니다.

전체 예제 코드

지금까지의 과정을 하나로 합친 전체 코드는 다음과 같습니다.

import pandas as pd
import numpy as np

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

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

# NaN이 포함된 Units 열의 평균 계산
# 유효한 값은 100, 150, 80이므로 평균은 110
meanVal = dataFrame['Units'].mean()

# 해당 열의 평균값으로 NaN 대체
dataFrame['Units'] = dataFrame['Units'].fillna(value=meanVal)
print("\n평균값으로 NaN을 채운 후 업데이트된 DataFrame...\n", dataFrame)

실행 결과

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

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

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

마무리

이처럼 mean()으로 열의 평균을 구한 뒤 fillna()에 전달하면 결측치를 간단하게 처리할 수 있습니다. 같은 원리로 median()(중앙값)이나 mode()(최빈값) 등 다른 통계값으로도 NaN을 채울 수 있으므로, 데이터의 특성에 맞게 적절한 방식을 선택하면 됩니다.