Pandas 데이터프레임을 다루다 보면 결측값(NaN) 때문에 그래프가 끊기거나 왜곡되는 문제가 자주 발생합니다. 이 글에서는 NumPy, Pandas, Matplotlib를 활용해 NaN 값이 포함된 데이터를 보간(interpolation)하여 자연스럽게 시각화하는 방법을 단계별로 살펴봅니다.
처리 단계
그림(figure) 크기를 설정하고, 서브플롯 사이 및 주변의 여백(padding)을 조정합니다.
Pandas 데이터프레임을 생성할 NumPy 배열을 만듭니다.
축 레이블(시계열 포함)을 가진 1차원 ndarray를 준비합니다.
보간 방식 중 'index', 'values' 옵션을 사용해 플롯을 그립니다. 이 옵션은 인덱스의 실제 숫자 값을 기준으로 결측 구간을 채웁니다.
show() 메서드를 호출해 최종 그림을 화면에 표시합니다.
예제 코드
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
# 그림 크기 설정
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
# NaN이 포함된 NumPy 배열 생성
data = np.array([1., 1.2, 0.89, np.NAN,
1.2, np.NAN, 1.89, 2.09,
.78, .67, np.NAN, 1.78,
np.NAN, 1.56, 1.89, 2.78]
)
# Pandas 시리즈(데이터프레임) 생성
df = pd.Series(data)
# 'index' 방식으로 보간하여 플롯 그리기
df.interpolate('index').plot(marker='o')
# 플롯 표시
plt.show()
코드 설명
np.NAN이 포함된 1차원 배열을 pd.Series로 변환한 뒤, df.interpolate('index')를 호출하면 인접한 유효한 데이터 포인트들을 기준으로 NaN 구간이 선형적으로 채워집니다. marker='o' 옵션을 사용하면 각 데이터 지점이 원형 마커로 표시되어 원본 값과 보간된 구간을 한눈에 구분할 수 있습니다.
실행 결과
위 코드를 실행하면 NaN 구간이 매끄럽게 연결된 아래와 같은 그래프가 출력됩니다.
