sharebook-kr / pykrx

KRX 주식 정보 스크래핑
693 stars 240 forks source link

stock.get_market_ohlcv / 'OverflowError: Python int too large to convert to C long 오류 #180

Open emoochin opened 5 months ago

emoochin commented 5 months ago

stock.get_market_ohlcv('20220924', '20240223', '032800') # 판타지오 032800 위 코드 실행 시 'OverflowError: Python int too large to convert to C long 오류가 발생합니다.

특이한 점은 데이터 조회 일자에 따라 오류가 발생하기도 하고 정상 동작하기도 합니다. 금일 실행 기준으로,

코드 실행 환경은 아래와 같습니다.

해결법을 찾지 못하여 문의 드립니다.

mr-yoo commented 3 months ago

모듈 버전을 확인해 주세요.

import pykrx
print(pykrx.__version__)

현재 최신은 1.0.46 입니다. 과거 버전이라면 업데이트 해 주시구요. pip install -U pykrx

Yukariko commented 3 months ago

@mr-yoo 저 역시 같은 오류가 나오는데요, python 3.12.4, 모듈 버전은 1.0.47입니다.

Yukariko commented 3 months ago
Traceback (most recent call last):
  File "/Users/yukariko/git/trading/database.py", line 10, in <module>
    df = stock.get_market_ohlcv("20110101", "20110201", ticker)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/yukariko/.venv/lib/python3.12/site-packages/pykrx/stock/stock_api.py", line 189, in get_market_ohlcv
    return get_market_ohlcv_by_date(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/yukariko/.venv/lib/python3.12/site-packages/pykrx/stock/stock_api.py", line 231, in get_market_ohlcv_by_date
    df = naver.get_market_ohlcv_by_date(fromdate , todate, ticker)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/yukariko/.venv/lib/python3.12/site-packages/pykrx/website/naver/wrap.py", line 28, in get_market_ohlcv_by_date
    df = df.astype(np.int32)
         ^^^^^^^^^^^^^^^^^^^
  File "/Users/yukariko/.venv/lib/python3.12/site-packages/pandas/core/generic.py", line 6643, in astype
    new_data = self._mgr.astype(dtype=dtype, copy=copy, errors=errors)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/yukariko/.venv/lib/python3.12/site-packages/pandas/core/internals/managers.py", line 430, in astype
    return self.apply(
           ^^^^^^^^^^^
  File "/Users/yukariko/.venv/lib/python3.12/site-packages/pandas/core/internals/managers.py", line 363, in apply
    applied = getattr(b, f)(**kwargs)
              ^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/yukariko/.venv/lib/python3.12/site-packages/pandas/core/internals/blocks.py", line 758, in astype
    new_values = astype_array_safe(values, dtype, copy=copy, errors=errors)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/yukariko/.venv/lib/python3.12/site-packages/pandas/core/dtypes/astype.py", line 237, in astype_array_safe
    new_values = astype_array(values, dtype, copy=copy)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/yukariko/.venv/lib/python3.12/site-packages/pandas/core/dtypes/astype.py", line 182, in astype_array
    values = _astype_nansafe(values, dtype, copy=copy)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/yukariko/.venv/lib/python3.12/site-packages/pandas/core/dtypes/astype.py", line 133, in _astype_nansafe
    return arr.astype(dtype, copy=True)
OverflowError: Python integer 3929287705 out of bounds for int32

trace 첨부합니다.

mr-yoo commented 3 months ago

Naver 에서 데이터를 스크래핑한 결과에 32비트로 표현 불가능한 큰수가 있는 것을 확인했습니다. becb471 커밋에서 64비트로 변경하도록 수정했습니다.