미국주식 배당금 데이터를 가져오다가 에러가 났습니다.
/usr/local/lib/python3.10/dist-packages/pandas/core/indexes/base.py in join(self, other, how, level, return_indexers, sort)
4592 if (self.tz is None) ^ (other.tz is None):
4593 # Raise instead of casting to object below.
-> 4594 raise TypeError("Cannot join tz-naive with tz-aware DatetimeIndex")
4595
4596 if not self._is_multi and not other._is_multi:
TypeError: Cannot join tz-naive with tz-aware DatetimeIndex
이게 무신 에러일까요?
어찌된 일인지 처음부터 보도록 하겠습니다.
미국주식(ETF)의 배당금 데이터를 가져와서 다른 백테스트를 해 볼까하는 생각을 했습니다.
배당금데이터는 가져왔는데 에러가 생기네요.
우선 아래와 같이 코드를 입력했습니다.
import pandas as pd
from pandas_datareader import data as pdr
import yfinance as yf
yf.pdr_override()
from datetime import datetime
pd.options.display.float_format = '{:,.2f}'.format
start = datetime(2005, 1, 1)
end = datetime(2024, 2, 29)
symbol = 'QQQ'
ticker = yf.Ticker(symbol)
ticker
배당금을 가져오기 위해서는 yf.Ticker를 사용해야 합니다.
나머지 부분들은 주식의 시고저종 데이터를 가져오기 위함과, 데이터 포멧을 보기좋게 만들기 위해서 입력한 코드입니다.
df = pdr.get_data_yahoo(symbol, start, end)
df.head(3)
데이터가 제대로 나오네요.
ticker = yf.Ticker(symbol)
ticker
s_div = ticker.dividends
s_div
배당데이터는 시리즈형태로 나오네요.
df_div = pd.DataFrame({'div': s_div})
df_div
그래서 병합하기 위해 데이터프레임 형태로 만들었습니다.
df = pd.merge(df, df_div, left_index=True, right_index=True)
df
TypeError Traceback (most recent call last)
<ipython-input-30-3076b5afc285> in <cell line: 1>()
----> 1 df = pd.merge(df, df_div, left_index=True, right_index=True)
2 df
5 frames
/usr/local/lib/python3.10/dist-packages/pandas/core/indexes/base.py in join(self, other, how, level, return_indexers, sort)
4592 if (self.tz is None) ^ (other.tz is None):
4593 # Raise instead of casting to object below.
-> 4594 raise TypeError("Cannot join tz-naive with tz-aware DatetimeIndex")
4595
4596 if not self._is_multi and not other._is_multi:
TypeError: Cannot join tz-naive with tz-aware DatetimeIndex
병합을 했는데 이런 에러가 나오네요...
ticker = yf.Ticker(symbol)
s_div = ticker.dividends
df['div'] = s_div
df.loc['2005-06-17']
Open 38.11
High 38.21
Low 37.75
Close 37.87
Adj Close 32.69
Volume 83,915,700.00
div NaN
Name: 2005-06-17 00:00:00, dtype: float64
이번에는 다른 방법으로 해보니 데이터가 없어져 버리네요.(위에 div가 Nan으로 표시가 되었습니다.)
구글링을 하니깐 한국 블로그에는 없고 stack overflow에 비슷한 내용으로 질문과 답변이 있더라구요.
해결방법은 간단합니다.
tz_localize(None) 이 코드만 하나 붙여주면 됩니다.
ticker = yf.Ticker(symbol)
s_div = ticker.dividends.tz_localize(None)
df['div'] = s_div
df.loc['2005-06-17']
Open 38.11
High 38.21
Low 37.75
Close 37.87
Adj Close 32.69
Volume 83,915,700.00
div 0.04
Name: 2005-06-17 00:00:00, dtype: float64
정말 간단하네요.
별건 아니지만, 관련 내용을 찾기가 어려워서 포스트 해 봅니다.
728x90
반응형
'파이썬(Python) > 파이썬으로 투자실험' 카테고리의 다른 글
SCHD를 QQQ와 함께 자산분배해서 투자하면 수익률이 괜찮을까? (1) | 2024.04.12 |
---|---|
미국 배당성장ETF SCHD로 적립식 투자를 하면 10년 후에 수익률이 어떻게 될까?(SCHD 적립식 투자 백테스트 배당금 포함) (2) | 2024.04.10 |
미국 ETF 적립식 투자시 초기 비용에 따른 수익률 비교 (0) | 2024.04.05 |
매월적립식 미국주식(ETF) 투자, 수익률을 더 올릴 방법은 없을까? (0) | 2024.04.03 |
미국주식(ETF) 적립식 투자가 정답일까? (0) | 2024.04.01 |
댓글