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

fillna·interpolate 없이 데이터프레임의 NaN 값 제거하기 (Python Matplotlib)

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 구간이 매끄럽게 연결된 아래와 같은 그래프가 출력됩니다.

fillna·interpolate 없이 데이터프레임의 NaN 값 제거하기 (Python Matplotlib)