메뉴 닫기

pandas 시계열 거래일 리샘플 resample B로 영업일 결측 ffill 보간 가이드

pandas 시계열 거래일 리샘플 resample B로 영업일 결측 ffill 보간 가이드

📌 실무 데이터의 주말·공휴일을 깔끔히 메우는 거래일 리샘플과 ffill 보간 방법을 한 번에 정리합니다

시계열 데이터는 날짜가 일정하게 이어지는 것처럼 보이지만, 실제 금융·로그 데이터에는 주말과 공휴일이 비어 있어 분석 흐름이 거칠게 끊기는 경우가 많습니다.
가격 데이터의 수익률 계산이나 이동평균처럼 일정 간격을 바탕으로 하는 지표는 특히 이런 공백에 민감하게 반응하죠.
그래서 데이터 프레임을 거래일 기준으로 정렬하고, 비어 있는 구간을 안전하게 메우는 절차가 중요해집니다.
이 글은 pandas에서 거래일 리샘플을 수행하는 핵심 도구인 resample(‘B’)를 중심으로, 비거래일을 영업일 간격으로 맞추고 ffill로 자연스럽게 값을 잇는 실무 패턴을 친숙한 예시와 함께 설명합니다.
분 단위나 일 단위가 섞여 있는 로그도 깔끔히 다듬을 수 있도록 사고의 순서와 체크 포인트를 차근차근 짚어드립니다.

데이터 전처리 과정에서 가장 많이 하는 질문은 두 가지로 압축됩니다.
첫째, 날짜 인덱스를 어떻게 설정해야 resample이 의도대로 동작하는가.
둘째, 결측을 무엇으로 메워야 왜곡 없이 지표 계산이 가능해지는가.
여기서는 DateTimeIndex 설정과 .resample(‘B’).ffill() 조합의 의미를 정확히 짚고, 필요 시 bfill이나 interpolate를 어떻게 선택할지 기준을 제시합니다.
또한 한국 공휴일 같은 실제 캘린더를 반영하는 팁까지 정리해, 분석의 기준선이 되는 시계열 축을 단단하게 만드는 데 초점을 맞춥니다.



🔗 거래일 리샘플의 개념과 원리

거래일 리샘플은 불규칙하거나 비거래일이 섞인 시계열을 영업일 빈도로 재배치하는 과정입니다.
pandas에서는 이때 resample(‘B’)를 사용해 월~금 기준의 균일한 축을 만들고, 존재하지 않던 날짜 인덱스를 생성합니다.
주말과 공휴일처럼 값이 없는 날은 기본적으로 비어 있게 되며, 이후 ffill 같은 결측 보간을 통해 분석 가능한 연속 시계열로 바꿉니다.
이 과정을 거치면 이동평균, 수익률, 롤링 윈도우 통계처럼 고정 간격을 전제로 한 지표 계산이 안정적으로 작동합니다.

핵심은 시간 축을 먼저 바로 세운 뒤 값을 메우는 순서입니다.
원본 데이터가 일부 날짜에만 기록되어 있다면, 그대로는 누락 구간 때문에 윈도우 경계가 흔들립니다.
따라서 거래일 빈도를 선언해 빈 칸을 명확히 드러내고, ffill(직전 관측치 유지) 또는 bfill(직후 관측치 유지)로 일관되게 처리합니다.
가격·지수처럼 하루 동안 값이 변하지 않는 것으로 간주해도 되는 지표에는 ffill이 자연스럽고, 체결 수량·거래대금처럼 누적 개념이 맞지 않는 항목은 합계 재집계가 필요한지 점검해야 합니다.

📌 리샘플과 리인덱싱의 차이

리샘플(resample)은 시간 규칙을 기준으로 새로운 버킷을 만들고, 각 버킷에 집계 함수(예: mean, sum, last)를 적용하는 연산입니다.
반면 reindex는 명시한 인덱스 집합으로 단순 정렬만 수행하며, 값은 그대로 가져옵니다.
거래일 정규화가 목적이라면 resample(‘B’)로 축을 만들고, 그다음 .ffill()처럼 결측을 보간하는 패턴이 가장 직관적입니다.

📌 B 빈도와 관련 영업일 규칙

‘B’는 Business day, 즉 월~금을 의미합니다.
이외에도 월말 영업일 ‘BM’, 분기말 영업일 ‘BQ’, 연말 영업일 ‘BA’ 같은 변형 규칙이 있으며, 상황에 따라 월말 기준 수익률 산출 등으로 확장할 수 있습니다.
다만 ‘B’는 법정 공휴일을 자동 인지하지 않기 때문에, 공휴일 반영은 별도의 캘린더 처리가 필요합니다.
후속 섹션에서 공휴일 캘린더 연동 팁을 안내합니다.

CODE BLOCK
import pandas as pd

# 일자와 종가가 일부 일자에만 존재하는 예시
df = pd.DataFrame({
    "date": ["2025-09-25","2025-09-26","2025-09-30"],
    "close": [101.5, 102.2, 103.0]
})
df = df.set_index(pd.to_datetime(df["date"])).drop(columns="date").sort_index()

# 1) 거래일(월~금) 축으로 리샘플
# 2) 비어 있는 날은 직전 값으로 채움(가격형 지표에 적합)
b = df.resample("B").ffill()

# 결과: 2025-09-29(월) 생성, 값은 2025-09-26의 close로 유지
print(b.head())

항목1 항목2
resample(‘B’) 영업일 간격으로 인덱스 버킷 생성, 집계·보간 조합 가능
ffill 직전 관측치를 연장해 결측 채움, 가격형 시계열에 적합

💬 리샘플은 시간 축을 만들어 주고, ffill은 값을 이어줍니다.
두 단계가 분리되어 있어야 디버깅과 품질 통제가 쉬워집니다.

  • 🛠️DateTimeIndex로 설정했는지 확인하고 df.index.is_monotonic_increasing 점검
  • ⚙️resample(‘B’) 적용 후 결측이 생기는지 isna().sum()으로 확인
  • 🔌가격형 지표는 ffill, 거래량·카운트형은 집계 기준(합계/평균/최댓값) 별도 검토

💡 TIP: 종가와 같이 스냅샷 값은 .resample(‘B’).ffill()이 적합합니다.
일중 누적 합계처럼 합산이 의미 있는 값은 .resample(‘B’).sum()으로 먼저 집계 후 필요 시 보간을 적용하세요.

⚠️ 주의: ffill은 값의 변화를 가정하지 않고 유지합니다.
급격한 이벤트가 주말에 발생했다면 월요일 첫 값에 반영되어, 실제 주말 변동을 포착하지 못할 수 있습니다.

💎 핵심 포인트:
거래일 리샘플의 표준 패턴은 DateTimeIndex 설정 → resample(‘B’) → 집계(선택) → ffill입니다.
이 순서를 지키면 시계열 왜곡을 최소화하고 후속 지표 계산의 신뢰도를 높일 수 있습니다.

🛠️ resample B와 DateTimeIndex 설정

pandas의 resample(‘B’) 메서드는 ‘Business Day Frequency’를 의미합니다.
이 빈도는 월요일부터 금요일까지만 포함하며, 토요일과 일요일은 자동으로 제외됩니다.
즉, 금융 데이터나 주가 시계열처럼 주말에 값이 없는 데이터를 다룰 때 매우 유용합니다.
하지만 이 기능을 제대로 사용하려면 반드시 DateTimeIndex가 설정되어 있어야 합니다.
이 조건이 충족되지 않으면 pandas는 시계열 리샘플을 수행할 수 없습니다.

우선 날짜 컬럼을 인덱스로 변환하고, 올바른 형태로 정렬되어 있는지 확인해야 합니다.
아래 예시는 기본적인 설정 순서를 보여줍니다.
데이터가 문자열 형태의 날짜를 가지고 있다면 pd.to_datetime()으로 변환 후 set_index()로 지정합니다.
그 후 sort_index()로 오름차순 정렬을 하면 resample이 정상적으로 작동합니다.

CODE BLOCK
import pandas as pd

# 날짜 컬럼을 시계열 인덱스로 설정
df = pd.DataFrame({
    '날짜': ['2025-09-25', '2025-09-26', '2025-09-30'],
    '종가': [101.5, 102.2, 103.0]
})
df['날짜'] = pd.to_datetime(df['날짜'])
df = df.set_index('날짜').sort_index()

# 영업일 리샘플 후 결측 보간
df_resampled = df.resample('B').ffill()
print(df_resampled)

이렇게 하면 2025년 9월 27~28일(토·일)은 건너뛰고, 9월 29일(월)이 새롭게 추가되며 바로 이전 거래일(9월 26일)의 종가로 채워집니다.
리샘플 결과는 기존 데이터보다 인덱스가 더 조밀해지고, 날짜 간격이 균일해집니다.
이 균일성이 바로 이후 이동평균, 수익률, 변동성 분석의 기반이 됩니다.

📌 DatetimeIndex와 PeriodIndex의 차이

pandas에는 시계열 인덱스로 DatetimeIndexPeriodIndex 두 가지가 있습니다.
DatetimeIndex는 실제 시각 단위의 데이터를 다룰 때, PeriodIndex는 특정 기간(예: 월별, 분기별)을 다룰 때 유리합니다.
리샘플은 기본적으로 DatetimeIndex에서 작동하며, PeriodIndex를 사용할 때는 먼저 .to_timestamp()로 변환해야 합니다.

📌 시계열 데이터 점검을 위한 3단계

  • 🧭pd.to_datetime()으로 날짜 컬럼의 자료형을 datetime으로 변환
  • 📅set_index() 후 인덱스가 오름차순으로 정렬되어 있는지 확인
  • 🧩resample(‘B’) 실행 후 결과 인덱스의 빈 구간과 결측 여부 점검

이러한 점검 절차는 단순해 보이지만, 금융·경제 데이터의 분석 품질을 결정하는 핵심 단계입니다.
특히 여러 자산이나 종목 데이터를 병합할 때는 각 데이터프레임의 인덱스 빈도와 정렬 상태가 다를 수 있으므로, 리샘플 전에 반드시 동일한 빈도와 기준으로 맞춰야 합니다.

💎 핵심 포인트:
resample은 인덱스가 DatetimeIndex일 때만 작동합니다.
정렬되지 않은 인덱스에서는 예기치 못한 집계가 발생할 수 있으므로 반드시 sort_index()로 순서를 확정한 뒤 적용해야 합니다.

💬 리샘플은 인덱스 정렬 상태에 민감합니다. 오름차순 정렬이 되어 있지 않다면 결과가 예상과 다르게 나올 수 있습니다.

💡 TIP: 여러 종목 데이터를 결합하기 전, 각각의 인덱스를 resample(‘B’)으로 맞추고 ffill로 보간하면 병합 시 NaN 발생을 크게 줄일 수 있습니다.



⚙️ 영업일 결측값 처리 ffill과 bfill 전략

리샘플 이후에 생긴 결측값은 시계열의 연속성을 보장하기 위해 반드시 처리해야 합니다.
이때 pandas에서는 ffill (forward fill)과 bfill (backward fill) 두 가지가 가장 자주 사용됩니다.
ffill은 직전의 유효값을 이어서 채우는 방식이고, bfill은 다음의 유효값을 뒤로부터 가져와 채우는 방식입니다.
특히 금융 데이터처럼 ‘이전 거래일의 값이 현재까지 유효하다’는 가정을 할 수 있을 때는 ffill이 기본 선택입니다.

예를 들어, 주가 시계열에서 주말 동안 거래가 없을 때 ffill을 적용하면 토요일과 일요일에는 금요일의 종가가 그대로 유지됩니다.
이것은 실제 거래가 없기 때문에 가격이 변하지 않는 것으로 해석할 수 있습니다.
반면에 이벤트 데이터나 결측 구간이 짧은 센서 데이터처럼, 다음 유효값을 기준으로 메우는 것이 더 자연스러울 때는 bfill을 선택할 수 있습니다.

CODE BLOCK
import pandas as pd

# 예시 데이터 생성
df = pd.DataFrame({
    '날짜': pd.date_range('2025-09-25', periods=5, freq='B'),
    '종가': [101.5, None, 102.0, None, 103.2]
})
df = df.set_index('날짜')

# 결측 처리 예시
df_ffill = df.ffill()   # 직전값 유지
df_bfill = df.bfill()   # 다음값으로 채움

print("ffill 결과:\n", df_ffill)
print("bfill 결과:\n", df_bfill)

위 예시처럼 ffill은 NaN이 있는 날에 직전 거래일의 값을 그대로 가져옵니다.
bfill은 반대로 다음 거래일의 값을 미리 채워 넣습니다.
데이터의 특성과 목적에 따라 두 방법을 선택하거나, 필요하다면 결합해서 사용할 수도 있습니다.

📌 ffill과 bfill의 선택 기준

ffill은 직전 상태의 연속성을 유지하기 때문에 가격형 데이터나 로그 데이터에 적합합니다.
bfill은 예측 기반 모델링이나 이벤트 로그에서, 직후 상태가 더 의미 있을 때 사용합니다.
예를 들어, 설비 센서에서 한 시점의 이상 값이 끊긴 경우, 다음 정상값으로 채워 일시적인 누락을 복원하는 용도로 bfill을 선택할 수 있습니다.

📌 결측 보간의 안전한 순서

결측 처리에는 반드시 순서가 있습니다.
먼저, 리샘플로 시계열의 틀을 잡고, 그 다음 ffill이나 bfill로 결측을 채우며, 필요하다면 마지막 단계에서 interpolate()를 적용합니다.
이렇게 해야 불필요한 보간으로 인해 원본 데이터의 흐름이 왜곡되는 일을 방지할 수 있습니다.

  • 📊가격형 데이터 → ffill() 기본 적용
  • 🧠센서, 로그형 데이터 → 필요 시 bfill() 또는 interpolate()
  • 🚫결측 처리 전 원본 누락 원인(휴장, 결측, 오류)을 반드시 식별

💬 결측을 무조건 채우는 것이 능사는 아닙니다.
데이터의 의미를 고려하지 않은 보간은 분석 결과를 왜곡할 수 있습니다.

💡 TIP: resample 후 ffill을 적용하면 거래일 단위의 누락이 깔끔히 해결됩니다.
다만 특정일 데이터가 완전히 빠진 경우에는 ffill 이전에 dropna()로 이상치를 제거한 뒤 적용하는 것이 안전합니다.

💎 핵심 포인트:
ffill과 bfill은 단순한 결측 채움 이상의 의미를 가집니다.
데이터의 시간적 맥락과 의미를 보존하는 방향으로 선택해야 시계열 분석이 왜곡되지 않습니다.

🔌 주말과 공휴일 캘린더 반영 방법

pandas의 resample(‘B’)은 기본적으로 월요일부터 금요일까지만 포함하는 기본 영업일 빈도를 사용합니다.
하지만 이 규칙은 각국의 실제 공휴일은 고려하지 않습니다.
예를 들어, 한국 증시는 설날이나 추석 같은 법정 공휴일에 휴장하지만, 기본 ‘B’ 빈도는 이 날들을 영업일로 간주합니다.
이 문제를 해결하려면 CustomBusinessDayAbstractHolidayCalendar를 활용해 실제 거래일 캘린더를 정의해야 합니다.

CODE BLOCK
import pandas as pd
from pandas.tseries.holiday import AbstractHolidayCalendar, Holiday
from pandas.tseries.offsets import CustomBusinessDay

# 한국 주요 공휴일 정의
class KoreaHolidayCalendar(AbstractHolidayCalendar):
    rules = [
        Holiday('New Year', month=1, day=1),
        Holiday('Independence Day', month=3, day=1),
        Holiday('Liberation Day', month=8, day=15),
        Holiday('National Foundation Day', month=10, day=3),
        Holiday('Christmas', month=12, day=25)
    ]

# 커스텀 영업일 빈도 생성
kr_bd = CustomBusinessDay(calendar=KoreaHolidayCalendar())

# 공휴일 제외한 거래일 리샘플
df = pd.DataFrame({'close':[100,102,103]}, index=pd.to_datetime(['2025-10-02','2025-10-03','2025-10-06']))
df_resampled = df.resample(kr_bd).ffill()
print(df_resampled)

이 코드는 2025년 10월 3일(개천절)을 자동으로 제외하고, 그 전후 영업일만 포함한 리샘플 결과를 반환합니다.
즉, 실제 한국 증시의 거래일 패턴과 일치하는 일정으로 데이터를 맞출 수 있습니다.
이렇게 커스텀 캘린더를 정의하면 주가, 환율, 금리 등 모든 시계열 데이터에 정확한 거래일 기준을 적용할 수 있습니다.

📌 pandas.tseries.holiday 모듈의 장점

pandas의 holiday 모듈은 단순히 날짜를 제외하는 기능 이상을 제공합니다.
각 나라별로 AbstractHolidayCalendar를 상속받아 연도별 법정 공휴일을 자동 계산할 수 있으며, ‘추석’처럼 매년 날짜가 바뀌는 이동형 명절도 등록 가능합니다.
이 기능을 사용하면 실제 영업일 기준의 시계열 데이터 분석이 가능해집니다.

📌 한국거래소(KRX) 공휴일 데이터를 활용하는 법

더 정밀한 방법으로는 한국거래소에서 공개하는 연도별 휴장일 데이터를 활용하는 것입니다.
KRX는 매년 거래소 공휴일 일정을 공시하며, 이를 pandas에 적용할 수도 있습니다.
단순히 CSV로 불러와 datetime 형식으로 변환하고, CustomBusinessDay의 holidays 인자로 전달하면 완벽하게 반영됩니다.

CODE BLOCK
# 예시: 한국거래소 공휴일 파일 사용
holidays = pd.read_csv('krx_holidays_2025.csv', parse_dates=['date'])
kr_bd_custom = CustomBusinessDay(holidays=holidays['date'])

# 실제 거래일 리샘플
df_resampled = df.resample(kr_bd_custom).ffill()

  • 📅‘B’ 빈도는 주말만 제외하고 공휴일은 반영하지 않음
  • ⚙️CustomBusinessDay로 특정 국가 공휴일 반영 가능
  • 🔍KRX 공시 자료를 CSV로 불러와 거래일 캘린더로 사용

💬 공휴일을 반영한 리샘플은 백테스트의 신뢰도를 높이는 필수 요소입니다.
실제 거래일 기준 분석을 위해 반드시 캘린더를 검증하세요.

💎 핵심 포인트:
resample(‘B’)는 기본적인 주중 거래일 기준을 제공합니다.
그러나 실제 시장 분석에서는 CustomBusinessDay를 통해 공휴일까지 반영하는 것이 정확한 방법입니다.



💡 리샘플 후 집계와 보간의 모범 패턴

리샘플링은 단순히 인덱스를 바꾸는 과정이 아니라, 데이터의 의미 단위를 다시 정리하는 절차입니다.
따라서 리샘플 후에는 집계(aggregation)와 보간(interpolation)을 적절히 조합해야 안정적인 시계열이 완성됩니다.
특히 금융 데이터에서는 ‘일봉 → 주봉’ 혹은 ‘틱 데이터 → 분봉’ 변환처럼, 집계 방식이 결과의 해석에 큰 영향을 미칩니다.

대표적인 패턴은 다음과 같습니다.
가격 데이터는 마지막 값(last)으로, 거래량 데이터는 합계(sum)로 집계합니다.
결측은 ffill을 적용해 연속성을 유지하되, 이벤트가 있는 시점에는 실제 거래일 기준으로만 업데이트되도록 합니다.
이 원칙을 따르면 리샘플 후에도 데이터의 물리적 의미가 유지됩니다.

CODE BLOCK
import pandas as pd

# 예시: 일봉 데이터를 주봉으로 리샘플
df = pd.DataFrame({
    "close": [100, 102, 103, 104, 105, 106, 107],
}, index=pd.date_range("2025-09-22", periods=7, freq="B"))

# 주봉 리샘플: 종가 마지막 값, 거래량은 합계로 처리
weekly = df.resample("W-FRI").last().ffill()
print(weekly)

이처럼 리샘플 + 집계 + ffill의 3단계 구조는 가장 널리 쓰이는 표준 패턴입니다.
리샘플은 주기 단위 변환, 집계는 지표 단위의 계산, 보간은 연속성 확보의 역할을 맡습니다.
이 세 단계를 분리하면 디버깅이 쉬워지고, 시계열 분석의 품질이 일정하게 유지됩니다.

📌 집계와 보간의 조합 규칙

리샘플 후 집계는 데이터의 본질을 바꾸지 않도록 신중히 선택해야 합니다.
예를 들어, 가격형 지표는 평균(mean)보다는 마지막(last)이나 종가를 유지하는 것이 더 정확합니다.
반면, 거래량·카운트형 데이터는 누적의 개념이 있기 때문에 sum()으로 합산하는 것이 자연스럽습니다.

데이터 유형 적절한 리샘플 집계 결측 보간 방식
가격, 지수 last() ffill()
거래량, 카운트 sum() 0 또는 interpolate()
센서 로그 mean() bfill() 또는 interpolate()

💬 집계 함수와 보간 방식을 명확히 구분하면 시계열 데이터의 품질이 눈에 띄게 좋아집니다.

📌 interpolate를 사용할 때의 주의점

interpolate()는 숫자 간의 연속적인 흐름을 가정하므로, 모든 데이터에 적합하지는 않습니다.
가격 데이터나 수익률에는 사용할 수 있지만, 이벤트형 데이터(예: 거래 발생 여부)에는 적합하지 않습니다.
또한 시간 간격이 일정해야 올바르게 동작하므로 반드시 resample(‘B’)로 정규화된 후에 적용해야 합니다.

💡 TIP: 리샘플 후 보간은 분석 목적에 따라 달라집니다.
시간 기반 분석에는 interpolate(method=’time’), 단순 수치형에는 interpolate(method=’linear’)이 적합합니다.

💎 핵심 포인트:
리샘플 → 집계 → 보간의 순서를 지키면, 시계열 데이터의 신뢰도를 극대화할 수 있습니다.
이는 금융·산업 데이터 모두에 적용되는 보편적 전처리 패턴입니다.

자주 묻는 질문 (FAQ)

pandas에서 resample(‘B’)는 어떤 기준으로 동작하나요?
resample(‘B’)는 월요일부터 금요일까지의 영업일(Business Day)을 기준으로 리샘플링을 수행합니다.
주말은 자동으로 제외되지만 공휴일은 포함되므로, 별도로 CustomBusinessDay 설정이 필요할 수 있습니다.
리샘플 후 ffill을 적용하는 이유가 뭔가요?
ffill은 직전 거래일의 값을 유지하여 시계열의 연속성을 보장합니다.
특히 금융 데이터처럼 주말이나 공휴일에 거래가 없는 경우, 직전 종가가 유지되는 것은 자연스러운 처리 방식입니다.
bfill과 ffill을 함께 사용할 수 있나요?
가능합니다. 일반적으로 ffill로 먼저 결측을 메우고, 남은 앞단의 NaN은 bfill로 채워 완성도를 높입니다.
이는 데이터의 양끝 결측 구간을 균형 있게 처리하는 실무적 접근입니다.
resample과 groupby는 어떤 차이가 있나요?
groupby는 특정 컬럼 값(예: 월, 분기 등)을 기준으로 그룹화하지만, resample은 시간 인덱스를 기준으로 일정 주기로 나눕니다.
즉, resample은 시계열 전용 집계 방식입니다.
공휴일을 자동으로 반영하려면 어떻게 해야 하나요?
pandas의 CustomBusinessDay와 AbstractHolidayCalendar를 사용하면 특정 국가의 공휴일을 자동으로 제외할 수 있습니다.
한국의 경우, KRX 공휴일 데이터를 CSV로 불러와 holidays 인자로 전달하면 완벽하게 반영됩니다.
리샘플 후 데이터의 통계값이 달라지는 이유는 무엇인가요?
리샘플 시 적용되는 집계 함수(sum, mean, last 등)에 따라 결과가 달라집니다.
특히 거래량·가격 데이터를 같은 방식으로 집계하면 왜곡될 수 있으니, 데이터 성격에 맞는 함수를 선택해야 합니다.
리샘플링 시 데이터가 빠지거나 중복되는 현상이 생길 때는?
이 경우 인덱스가 정렬되어 있지 않거나 중복된 날짜가 존재할 가능성이 높습니다.
먼저 df = df.sort_index()df = df[~df.index.duplicated()]를 적용해 정제하세요.
resample 대신 asfreq를 사용해도 되나요?
asfreq는 단순히 주기를 변경하지만, 집계 기능은 없습니다.
값이 없는 날짜는 NaN으로 남기기 때문에, 리샘플처럼 집계나 보간을 자동으로 수행하지 않습니다.

📘 거래일 리샘플과 보간으로 완성하는 정제된 시계열 데이터

pandas의 resample(‘B’)은 금융과 산업 데이터를 다루는 모든 실무자에게 필수적인 함수입니다.
주말과 공휴일을 제외하고 일정한 거래일 기준으로 데이터를 재정렬함으로써, 시계열의 간격을 균일하게 맞추고 계산의 신뢰도를 높입니다.
이때 ffill로 결측을 보간하면 자연스러운 흐름이 유지되어, 이동평균·수익률·변동성 분석 등 다양한 통계적 계산이 안정적으로 이루어집니다.

특히 실제 공휴일까지 반영하려면 CustomBusinessDay와 KRX 거래일 캘린더를 활용하는 것이 좋습니다.
이렇게 하면 단순한 날짜 정렬을 넘어, 실제 시장 데이터에 기반한 정확한 거래일 기준의 시계열을 구축할 수 있습니다.
결과적으로, resample → 집계 → 보간의 세 단계를 올바른 순서로 적용하는 것이 완전한 시계열 정제의 핵심입니다.

이 글에서 소개한 거래일 리샘플링 패턴은 단순한 데이터 처리 스킬을 넘어, 분석의 일관성과 신뢰도를 높이는 강력한 도구입니다.
pandas의 유연한 시계열 API를 잘 활용한다면, 데이터의 시간축을 언제든 원하는 형태로 정렬하고 의미 있게 확장할 수 있습니다.


🏷️ 관련 태그 : pandas, 시계열데이터, 거래일리샘플, resample, ffill, bfill, 영업일보간, 데이터전처리, 금융데이터, 파이썬분석