pandas_datareader 로 가져온 데이터의 매월 말일 구하기
본문 바로가기
파이썬(Python)/파이썬으로 투자실험

pandas_datareader 로 가져온 데이터의 매월 말일 구하기

by 만초손겸수익 2024. 3. 1.

pandas_datareader를 이용하면 많은 해외 주식 데이터를 가져올 수 있습니다.

 

매월 말일 기준으로 투자를 하는 방법에 대한 백테스를 하기 위해서 매월 마지막날 데이터만 가져오려고 합니다.

 

구글을 검색해봐도 찾기가 쉽지 않더라구요. 어렵게 찾았기에 기록으로 남기려고 합니다.

 

import pandas as pd
from pandas_datareader import data as pdr
import yfinance as yf
yf.pdr_override()
from datetime import datetime

ticker = 'voo'

df = pdr.get_data_yahoo(ticker)
df

 

필요 모듈을 가져온 다음에 'voo' 즉 Vangard S&P 500 ETF 데이터를 가져옵니다.

type(df.index)

 

 

Index의  type은 'DatetimeIndex'입니다. 이걸 활용하면 쉽게 월별 말일을 구할 수 있습니다.

 

df['Odate'] = df.index
df

 

groupby를 사용해서 데이터를 재설정 할 것이기 때문에 우선 index를 복사해서 'Odate'컬럼을 하나 만들었습니다.

 

"년도별, 월별 마지막으로 그룹핑하기 => 'Odate' 컬럼을 Index로 설정하기"

 

위와 같은 순서로 월별 마지막일 데이터만 가져올 예정입니다.

 

df.groupby(by=df.index.year).last()

년도별 마지막 날짜를 가져오려면 위와 같이 코드를 작성하면 됩니다.

 

indext가 datetimeindex 타입이라서 이렇게 추출 하는게 가능합니다.

 

이제 년도별 월별로 그룹핑해보겠습니다.

 

df_m = df.groupby(by=[df.index.year, df.index.month]).last()
df_m

 

연도별, 월별 인덱스 값을 리스트형태로 입력한 다음 마지막일을 구하는 'last()' 함수를 넣어주면 됩니다.

 

이렇게 그룹핑한 데이터는 'df_m'이라는 데이터프레임 변수에 넣어줍니다.

 

그런데 인덱스가 보기는 좋으나 사용하기가 좀 불편할 것 같네요

 

df_m = df.groupby(by=[df.index.year, df.index.month], as_index=False).last()
df_m

 

"as_index=False"로 옵션을 설정하면 index는 자동으로 숫자로 순차적으로 매겨집니다.

 

df_m.set_index('Odate', inplace=True)
df_m

 

이제 마지막으로 처음에 컬럼('Odate')으로 복사한 index를 다시 Index로 설정해 줍니다.

 

쉬운 방법인데 구글에서 찾기가 힘드네요.

728x90
반응형

댓글