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

Python Pandas – interpolate() 메서드로 다항식 보간(Polynomial Interpolation)을 활용해 NaN 값 채우기

Pandas에서 다항식 보간(Polynomial Interpolation)을 사용해 NaN(결측값)을 채우려면 interpolate() 메서드를 활용하면 됩니다. 이때 method 매개변수를 'polynomial'로 지정하고, order 매개변수에 다항식의 차수를 함께 설정해야 합니다.

다항식 보간은 기존 데이터 포인트를 지나는 다항식 곡선을 피팅(fitting)한 뒤, 그 곡선 위의 값을 이용해 결측값을 추정하는 방식입니다. 단순 선형 보간보다 데이터의 곡률 변화를 더 잘 반영할 수 있다는 장점이 있습니다.

1. 필요한 라이브러리 임포트

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

import pandas as pd
import numpy as np

2. NaN 값이 포함된 시리즈 생성

NumPy의 np.nan을 사용해 NaN 값이 포함된 Pandas 시리즈를 생성합니다.

d = pd.Series([10, 20, np.nan, 65, 75, 85, np.nan, 100])

3. 다항식 보간 적용하기

interpolate() 메서드의 method 매개변수에 'polynomial'을 지정하고, order 매개변수에 차수를 전달해 다항식 보간을 수행합니다. 여기서는 2차 다항식(order=2)을 사용했습니다.

d.interpolate(method='polynomial', order=2)

전체 예제 코드

지금까지의 과정을 하나의 코드로 정리하면 다음과 같습니다.

import pandas as pd
import numpy as np

# pandas 시리즈 생성
d = pd.Series([10, 20, np.nan, 65, 75, 85, np.nan, 100])

print("Series...\n", d)

# 다항식 보간 적용
print("\nPolynomial Interpolation...\n", d.interpolate(method='polynomial', order=2))

실행 결과

위 코드를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.

Series...
0    10.0
1    20.0
2     NaN
3    65.0
4    75.0
5    85.0
6     NaN
7   100.0
dtype: float64

Polynomial Interpolation...
0    10.000000
1    20.000000
2    42.854015
3    65.000000
4    75.000000
5    85.000000
6    93.532847
7   100.000000
dtype: float64

결과 해석

실행 결과를 살펴보면, 인덱스 2의 NaN은 약 42.854015로, 인덱스 6의 NaN은 약 93.532847로 채워진 것을 확인할 수 있습니다. 두 값 모두 주변 데이터의 추세를 따르는 자연스러운 추정치입니다.

참고로 'polynomial' 방식은 내부적으로 SciPy의 보간 기능을 사용하므로, 환경에 SciPy가 설치되어 있어야 정상적으로 동작합니다. 또한 order 값이 클수록 복잡한 곡선이 피팅되지만, 과적합(overfitting)으로 인해 비정상적인 값이 나올 수 있으므로 데이터 특성에 맞게 적절한 차수를 선택하는 것이 중요합니다.