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을 채울 수 있으므로, 데이터의 특성에 맞게 적절한 방식을 선택하면 됩니다.