본문 바로가기
Python Code

파이썬에서 인덱스 또는 컬럼을 사용 할 경우 최소/최대 날짜 찾기

by 인천고래 quant

안녕하세요. 주식 투자관련 지식을 공유하는 인천고래입니다.

fdr 모듈을 사용한다던지 엑셀에 있는 주식 데이터를 로드해서 사용할 때 인덱스 여부에 따라 데이터 접근성과 효율성이 달라지기도 하는데 인덱스와 컬럼으로 접근했을 때의 최소, 최대 날짜를 찾는 방법에 대해 비교해서 알아보도록 하겠습니다.

 

목차

  1. 인덱스로 최소/최대 날짜 찾기
  2. 컬럼명으로 최소/최대 날짜 찾기
  3. 컬럼 방식과 인덱스 방식의 비교 분석
  4. 컬럼방식과 인덱스 방식의 속도 비교

 

1. 인덱스로 최소/최대 날짜 찾기

인덱스로 접근하는 방식은 아래와 같습니다.

우선 데이터프레임의 인덱스의 이름이 "Date"로 되어 있는지 확인을 한 뒤에 index를 사용해서 최소값과 최대값을 찾으면 됩니다.

if daily_df.index.name == 'Date':  # Date가 인덱스인 경우
    start_date = daily_df.index.min()  # 가장 과거의 날짜
    end_date = daily_df.index.max()  # 가장 최근의 날짜

print(f"이전 날짜: {start_date}, 최신 날짜: {end_date}")

 

코드 설명

  • min(): index의 가장 작은 값 (최초 날짜).
  • max(): index의 가장 큰 값 (마지막 날짜).

index가 datetime 타입이므로 비교 및 계산도 가능합니다.

 

2. 컬럼명으로 최소/최대 날짜 찾기

사용 방식은 위에서 index로 사용된 명령문을 대체하여 ['Date']와 같이 사용을 하시면 됩니다.

if 'Date' in daily_df.columns:
        start_date = daily_df['Date'].min()
        end_date = daily_df['Date'].max()
        
print(f"이전 날짜: {start_date}, 최신 날짜: {end_date}")

 

결과는 인덱스 사용방법과 같이 최초 날짜와 마지막 날짜가 나오게 됩니다.

 

3. 컬럼 방식과 인덱스 방식의 비교

컬럼 사용과 인덱스 사용 방식의 비교는 아래와 같습니다만

슬라이싱 기능을 사용할 때에는 인덱스 방식이 훨씬 직관적이 되는 것 같습니다.

방식 컬럼 사용 인덱스 사용
접근 방법 daily_df['Date'].min() daily_df.index.min()
조건 필터링 daily_df[daily_df['Date'] == start_date] daily_df.loc[start_date] 
슬라이싱 daily_df[(daily_df['Date'] >= '2023-01-01') & (daily_df['Date'] <= '2023-01-31')] daily_df['2023-01-01':'2023-01-31']
성능 느림 (컬럼 전체 스캔) 빠름 (인덱스 해시 탐색)

 

그러면 이제 실질적으로 컬럼으로 접근했을 때와 인덱스로 접근했을 때의 속도 차이를 확인해 보도록 하겠습니다.

 

4. 컬럼 방식과 인덱스 방식의 속도 비교

컬럼 사용과 인덱스 사용 방식의 속도 비교를 하기위해 임시 데이터를 만들어서 테스트를 진행해 보도록 하겠습니다.

import pandas as pd
import numpy as np
import time

# 데이터 생성 (2010년 1월 1일부터 2024년 12월 31일까지)
date_rng = pd.date_range(start='2010-01-01', end='2024-12-31', freq='D')
df = pd.DataFrame({'value': np.random.randint(0, 100, len(date_rng)), 'Date': date_rng})
df_indexed = df.set_index('Date')  # Date를 인덱스로 설정


# 컬럼 접근 속도 측정
start_time_col = time.perf_counter()
start_date_col = df['Date'].min()
end_date_col = df['Date'].max()
elapsed_col = time.perf_counter() - start_time_col

print(f"컬럼 접근: {elapsed_col:.6f}초 (이전 날짜: {start_date_col}, 최신 날짜: {end_date_col})")

# 인덱스 접근 속도 측정
start_time_idx = time.perf_counter()
start_date_idx = df_indexed.index.min()
end_date_idx = df_indexed.index.max()
elapsed_idx = time.perf_counter() - start_time_idx

print(f"인덱스 접근: {elapsed_idx:.6f}초 (이전 날짜: {start_date_idx}, 최신 날짜: {end_date_idx})")

 

위의 코드대로 실행한 결과를 확인해 보니 저는 아래와 같이 나왔습니다.

각자의 컴퓨터 성능에 따라 속도가 달라지기는 하겠지만 인덱스로 접근하는것이 속도가 우월하게 빠르다는 것을 알 수 있을 것 같습니다.

컬럼과 인덱스 방식으로의 데이터 속도 체크

 

이것으로 오늘은 데이트 컬럼과 인덱스 컬럼을 이용해서 데이터를 접근했을 때의 방식과 속도 차이를 알아보았습니다.

 

제 글을 읽어 주셔서 감사드립니다.

오늘도 행복한 하루 보내시기를 바라겠습니다.

 

 


 

자신만의 매매법을 자동매매 프로그램으로 만들거나 

기법이 확률이 떨어진다면 백테스팅을 사용해서 확률을 높여야 합니다. 

아래의 링크를 통해서 요청하시면 요청하신 이상(가격대비 성능의 최대치)의 결과물을 받아 보실 수 있습니다.

 

한 방에 주식 데이터 만들기 - 크몽

인천고래 전문가의 IT·프로그래밍 서비스를 만나보세요. <p>퀀트 매매, 수익률 높은 매매, 확률 높은 매매, 잃지 않는 매매 등<...

kmong.com

 


 

다른 보조지표에 대해서는 아래의 링크 글을 통해 자세히 알아 볼 수 있습니다.

 

보조지표 리스트 (추세, 모멘텀, 채널, 변동성, 거래량, 기타 지표)

안녕하세요. 주식을 통해 삶을 영위할 수 있는 방법을 찾으며  인생 후반을 준비하고 있는 인천고래입니다.이전부터 보조지표에 대해서 글을 작성해 왔지만 중요한 것 위주로 작성을 하다보니

i-whale.com


 

단기적인 스윙 및 세력 매집 분석에 용이한 기준봉에 대해서는 아래의 링크 글을 통해 자세히 알아 볼 수 있습니다.

 

'주식 기준봉' 카테고리의 글 목록

주식 투자에 필요한 교육 내용을 제공하고 시장 정보 및 통계 등 수록하고 기록함을 원칙으로 하되 데이터마이닝을 통해 객관적인 자료를 구축하여 보다 경제적 자유를 얻기 위하여 사이트를

i-whale.com

 

-

댓글