目次
1. Python에서 NaN을 판별하는 방법
NaN이란?
NaN(Not a Number)은 수치 연산이 무효이거나 정의되지 않았음을 나타내는 특수한 부동소수점 값입니다. 전형적으로는 0으로 나누거나 무효한 연산 결과로 나타나기 때문에 데이터 분석이나 수치 처리 시 특히 주의가 필요합니다. NaN을 올바르게 처리하지 않으면 계산 결과가 부정확해지거나 프로그램이 기대대로 동작하지 않을 가능성이 있습니다.NaN 판정의 중요성
NaN이 데이터셋에 포함되어 있는 경우, 데이터의 신뢰성이나 계산 결과에 영향을 받을 가능성이 있습니다. 따라서 먼저 NaN을 판정하고, 그 후의 처리(삭제, 대체 등)를 적절히 수행하는 것이 중요합니다.2. NaN 생성 방법
Python에서는 NaN을float('nan')
으로 생성할 수 있습니다. 수치 계산에서 무효한 결과를 명시적으로 나타낼 때 사용됩니다.num = float('nan')
print(num) # 결과: nan
None와의 차이
NaN은 수치적으로 무효인 반면,None
은 “아무것도 없음”이라는 상태를 나타냅니다. None
은 ==
로 비교할 수 있지만, NaN은 자신과 비교해도 동일하지 않기 때문에 ==
로 판단하는 것은 부적절합니다.num = float('')
print(num == num) # 결과: False
none_value = None
print(none_value == None) # 결과: True

3. NaN 판별 방법
3.1. 표준 라이브러리로 판별(math.isnan()
)
Python 표준 라이브러리에서 NaN을 판별하려면 math.isnan()
을 사용합니다. 이 함수는 주어진 값이 NaN이면 True
를 반환합니다.import math
num = float('nan')
print(math.isnan(num)) # 결과: True
3.2. NumPy를 사용한 판별(numpy.isnan()
)
NumPy는 배열 및 행렬 계산에 특화된 라이브러리로, 배열 내 NaN을 효율적으로 판별하기 위한 numpy.isnan()
함수가 제공됩니다. 수치 분석 및 과학 데이터 처리에 자주 사용됩니다.import numpy as np
num_list = [1, 2, np.nan, 4]
print(np.isnan(num_list)) # 결과: [False False True False]
3.3. pandas로 판별(pandas.isna()
)
데이터프레임을 다룰 때는 pandas의 isna()
또는 isnull()
을 사용해 NaN을 판별합니다. 이 함수들은 데이터 클리닝 및 결측값 처리에 도움이 됩니다.import pandas as pd
import numpy as np
data = pd.Series([1, 2, np.nan, 4])
print(pd.isna(data)) # 결과: 0 False
# 1 False
# 2 True
# 3 False
4. NaN를 삭제·대체하는 방법
4.1. 리스트에서 NaN를 삭제하는 방법
리스트에 있는 NaN를 삭제하려면、math.isnan()
과 리스트 내포표현을 결합하여 구현할 수 있습니다。import math
num_list = [1, 2, float('nan'), 4]
clean_list = [num for num in num_list if not math.isnan(num)]
print(clean_list) # 결과: [1, 2, 4]
4.2. pandas에서 NaN를 삭제하는(dropna()
)
데이터프레임에서 NaN를 삭제하려면、dropna()
메서드를 사용합니다。이를 통해 NaN를 포함하는 행 또는 열을 제거할 수 있습니다。import pandas as pd
import numpy as np
df = pd.DataFrame({'A': [1, 2, np.nan], 'B': [4, np.nan, 6]})
clean_df = df.dropna()
print(clean_df)
4.3. pandas에서 NaN를 대체하는(fillna()
)
NaN를 삭제하는 것이 아니라 특정 값으로 대체하고 싶을 경우、fillna()
메서드를 사용합니다。import pandas as pd
import numpy as np
df = pd.DataFrame({'A': [1, 2, np.nan], 'B': [4, np.nan, 6]})
df.fillna(0, inplace=True)
print(df)

5. NaN가 포함된 계산
NaN가 포함된 계산은 계산 결과도 NaN이 되므로, 정확한 결과를 얻기 위해서는 사전에 NaN을 제거하거나 대체해야 합니다.import numpy as np
result = 10 + np.nan
print(result) # 결과: nan
NaN를 포함한 통계 계산 예
NaN를 포함하는 데이터셋으로 통계 계산을 수행할 때, NaN를 무시하고 계산하고 싶다면 NumPy의nanmean()
함수를 사용합니다. 이는 NaN를 제외하고 평균값을 계산합니다.import numpy as np
data = [1, 2, np.nan, 4]
mean = np.nanmean(data) # NaN를 무시하고 평균값을 계산
print(mean) # 결과: 2.3333...
6. NaN 판정에 관한 주의점
6.1. 비교 연산자의 동작
NaN은 비교 연산자로 다른 숫자나 자신과 비교해도 동일하지 않은 특수한 속성을 가지고 있습니다. 따라서==
나 !=
로는 판정할 수 없으며, 전용 함수(isnan()
와 isna()
)를 사용해야 합니다.num = float('nan')
print(num == num) # 결과: False
6.2. 데이터 클리닝 시 포인트
데이터 분석에서는 NaN이 남아 있으면 정확한 계산을 할 수 없습니다. 계산 결과를 왜곡시킬 가능성이 있기 때문에 사전에 적절한 클리닝이 필요합니다. NaN을 적절히 제거하거나 대체함으로써 데이터의 신뢰성을 높일 수 있습니다.7. 요약
Python에서는math
, numpy
, pandas
를 활용함으로써 NaN을 효율적으로 판별·처리할 수 있습니다. NaN의 다루는 방법을 올바르게 이해하고, 데이터 분석 및 수치 계산의 신뢰성을 유지하기 위한 기초 지식을 갖추는 것은 모든 프로그래밍 분야에서 유용한 스킬입니다.