inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

파이썬 증권 데이터 수집과 분석으로 신호와 소음 찾기

[3/3] 이거 하나면 코드 한줄로 KRX 전체 종목 수집 가능?!

fdr.StockListing("KRW") 불러올때 오류가 납니다.

648

고형진

작성한 질문수 2

1

ValueError: unknown format code 'd' for object of type 'str' 이라고 뜨네요

krx/listing.py 에서

df_listing['Symbol'] = df_listing['Symbol'].apply(lambda x: '{:06d}'.format(x))

이부분에서 x값이 string으로 들어가서 문제가 생기는듯 합니다. 버전은 선생님 버전이랑 같은데 뭐가 문제인지 몰겠네요

pandas python numpy 웹-크롤링 plotly seaborn 웹 스크래핑 matplotlib

답변 2

1

박조은

안녕하세요.

질문 주신 내용은 아래 링크에 있는 소스코드에서 난 오류입니다.

https://github.com/FinanceData/FinanceDataReader/blob/master/krx/listing.py#L30

데이터를 제대로 받아왔다면 오류가 발생하지 않았을텐데 해당 데이터를 불러오는 과정에서 오류가 발생해서 데이터 형식이 d 형태로 보이는게 아닐까 싶습니다.

주피터 노트북에서 아래의 소스코드를 직접 실행해 보세요.

코드는 아래 제가 붙여넣기 한 코드보다 깃헙에 있는 21-29 행에 있는 소스코드를 비어있는 주피터 노트북을 생성하고 실행해 보세요.

아마도 SSL 인증서 문제로 데이터를 받아오지 못해 오류가 발생했을 것으로 추측됩니다.

 

        # For mac, SSL CERTIFICATION VERIFICATION ERROR
        ssl._create_default_https_context = ssl._create_unverified_context
        
        url = 'http://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13'
        df_listing = pd.read_html(url, header=0)[0]
        cols_ren = {'회사명':'Name', '종목코드':'Symbol', '업종':'Sector', '주요제품':'Industry', 
                            '상장일':'ListingDate', '결산월':'SettleMonth',  '대표자명':'Representative', 
                            '홈페이지':'HomePage', '지역':'Region', }
        df_listing = df_listing.rename(columns = cols_ren)

 

 

0

haemil

답변해주셔서 감사합니다 선생님~! 🙏

url을 통해 전달해주신 저장소의 21-29 행 코드를 빈 주피터 노트북을 새롭게 열어서 실행해보니 

아래와 같은 오류 메시지를 확인했습니다. 

아래 오류 메시지를 살펴보며 몇 가지 궁금한 것이 생겨서 진행해본 내용이 있는데 혹시 제가 잘못하고 있는 부분이 있는지 확인 한 번 부탁드려도 될까요?

 

ssl 이 정의 되어 있지 않다는 오류 메시지에 대응하기 위해 저장소의 내용대로 

import ssl

 

ssl을 import 하고 코드를 다시 실행시켜 보았더니 코드가 21~29행까지는 코드가 실행이 되는 것 같습니다.  (실행이 되는 것 같다고 한 이유는 정상적인 실행인지 확인할 길이 없기 때문에.... 그렇습니다)

 

아래의 코드를 실행한 결과 

df_listing = df_listing.rename(columns = cols_ren)
df_listing

 

29행까지의 코드가 실행된 내용은 위의 캡쳐내역과 같습니다. 

이후 한줄한줄씩 실행하며 오류를 살펴보려고 했는데, 

30번째 행을 실행하니 오류가 바로 발생했습니다. 

오류의 내용은 이전과 같습니다. 

---> 14 df_listing['Symbol'] = df_listing['Symbol'].apply(lambda x: '{:06d}'.format(x))
     15 df_listing

ValueError: Unknown format code 'd' for object of type 'str'

 

오류 메시지를 살펴보며 궁금한 것이 생겨서 진행해본 내용인데, 현재까지의 상황은 이렇습니다.

제가 수업을 듣고 있는 부분은 판다스를 다루는 방법을 학습하는 부분이라서 큰 영향은 없을 것 같지만..! 

혹시나 제가 잘못하고 있는 부분이 있는지 궁금해서 이렇게 문의를 드려봅니다..! 

 

감사합니다. 🙇🏻‍♂️

 

0

박조은

안녕하세요.

Name              object
Symbol             int64
Sector            object
Industry          object
ListingDate       object
SettleMonth       object
Representative    object
HomePage          object
Region            object
dtype: object

df_listing['Symbol'] = df_listing['Symbol'].apply(lambda x: '{:06d}'.format(x))

# 처음에는 Symbol 이 숫자 타입입니다. 그런데 숫자타입이면 012345 라는 종목코드일때 앞의 0이 사라지게 됩니다.

# 마치 엑셀에서 전화번호 앞의 0이 숫자로 인식했을 때 사라지는 것과 마찬가지 이치입니다.

# 여기에서 이 문제를 해결하기 위해 앞에 0이 사라졌다면 다음의 방법으로 숫자 6자리로 만들어 줍니다.

x2 = 123

'{:06d}'.format(x2)

# 위에서 숫자 6자리로 만들어 주고 타입을 문자로 변경하면 앞의 0이 사라지지 않습니다.

# 그래서 타입이 object 로 변경된 것을 확인해 볼 수 있습니다.

df_listing.dtypes

-----

Name              object
Symbol            object
Sector            object
Industry          object
ListingDate       object
SettleMonth       object
Representative    object
HomePage          object
Region            object
dtype: object

-----

# 문자 타입을 다시 읽어와서 앞에 0을 붙이고 형변환을 하려고 하면 숫자가 아니기 때문에 오류가 나게 됩니다.

# 그래서 데이터를 처음에 읽어왔을 때 종목코드에 문자가 섞여있다면 이런 오류가 발생할 수 있으며,

# 아니면 처음부터 읽어온 타입이 문자일 때 이런 현상이 있을 수 있습니다.

# 아마도 설치된 판다스 버전에 따라 결과값을 다르게 받아오는 것으로 추측됩니다.

df_listing['Symbol'] = df_listing['Symbol'].apply(lambda x: '{:06d}'.format(x))

<ipython-input-7-3df13bd90e34> in <lambda>(x)
----> 1 df_listing['Symbol'] = df_listing['Symbol'].apply(lambda x: '{:06d}'.format(x))

ValueError: Unknown format code 'd' for object of type 'str'

사용하고 있는 판다스 버전을 알려주시면 판다스 버전 문제인지 확인해 볼 수 있을것 같습니다.

pd.__version__ 으로 판다스 버전을 올려주시면 확인해 보겠습니다.
오류제보 감사합니다 :)

0

haemil

상세하게 답변해주셔서 감사합니다. 선생님 🙇🏻‍♂️

판다스 버전을 확인해보니 아래처럼 1.3.3 으로 확인됩니다..!

 

선생님 덕분에 미지의 영역으로 남아 있던 문제가 이제 손에 잡히는 것처럼 느껴져요! 

정말 감사합니다. 🙏

1

박조은

안녕하세요. 버전이 저와 같다면 오타가 있어서 그런것 같아요.

아래 오타가 있어요 KRW => KRX 로 바꿔서 불러와 보세요!

fdr.StockListing("KRW") => fdr.StockListing("KRX")

0

고형진

앗 제가 잘못썼는데 KRX로 해도 같은 결과가 나옵니다. 코스피도 마찬가지에용..

0

박조은

안녕하세요. 실습 초반부터 어려움이 많으셨겠어요.

0.9.31 버전 이상을 사용하는 것을 추천하고요.

일단 아래 colab 링크에서 아래 코드의 주석을 풀고 실습을 해보세요. 

!pip install -U finance-datareader

https://colab.research.google.com/github/corazzon/finance-data-analysis/blob/main/2.1%20FinanceDataReader%EB%A5%BC%20%ED%86%B5%ED%95%9C%20%EC%83%81%EC%9E%A5%EC%A2%85%EB%AA%A9%20%EC%A0%84%EC%B2%B4%20%EB%B6%88%EB%9F%AC%EC%98%A4%EA%B8%B0-output.ipynb

그리고 로컬 주피터 노트북에서도 다시 실행해도 오류가 난다면 아래 명령어로 재설치를 해보세요.


!
pip uninstall finance-datareader

!pip install finance-datareader --upgrade

 

0

haemil

어떻게 해결하셨는지 여쭈어봐도 될까요? 저도 같은 에러를 겪고 있는데... 처음에 한 번 진행했을 때는 잘 되던 것 같은데 실습해보려고 하니 갑자기 안 되네요 ㅠ...

0

박조은

안녕하세요. 혹시 위 Colab 으로 실습해도 같은 결과가 나오는지 궁금합니다. 실습하신 소스코드에 대한 스크린샷과 오류 메시지를 함께 올려주시면 도움을 드리겠습니다.

0

haemil

선생님께서 공유해주신 Colab 으로 실습을 진행하니 정상적으로 작동이 됩니다 감사합니다. 다만 제 컴퓨터 로컬 환경에서 실행되지 않는 부분이 아쉽네요 ㅠ. `FinanceDataReader` 도 정상적으로 설치했고 버전도 최신 버전인데, 아래와 같이 문의 내역과 동일한 오류가 발생해서..! 조금 해매었어요.  강의 내용을 따라 실습을 진행하다가 추후 문제가 된다면..! 다시 여쭈어보겠습니다. 

```

     28                             '홈페이지':'HomePage', '지역':'Region', }
     29         df_listing = df_listing.rename(columns = cols_ren)
---> 30         df_listing['Symbol'] = df_listing['Symbol'].apply(lambda x: '{:06d}'.format(x))
     31         df_listing['ListingDate'] = pd.to_datetime(df_listing['ListingDate'])
     32 

ValueError: Unknown format code 'd' for object of type 'str'

```

 

답변해주셔서 감사합니다. 🙇🏻‍♂️

0

박조은

아래 답변을 추가했습니다. 아래 내용을 참고해서 원래 소스코드를 실행했을 때 정상 동작하는지 확인해 주세요!

1

도야

에러: ValueError: Unknown format code 'd' for object of type 'str'

해결: 아래와 같이 라이브러리를 직접 수정해 보세요!

File c:\dohyah\SIIS\venv64\lib\site-packages\FinanceDataReader\krx\listing.py:81, in KrxStockListing.read(self)

77 cols_ren = {'회사명':'Name', '종목코드':'Code', '업종':'Sector', '주요제품':'Industry',

78 '상장일':'ListingDate', '결산월':'SettleMonth', '대표자명':'Representative',

79 '홈페이지':'HomePage', '지역':'Region', }

80 df_listing = df_listing.rename(columns = cols_ren)

---> 81 df_listing['Code'] = df_listing['Code'].apply(lambda x: '{:06d}'.format(x))

82 df_listing['ListingDate'] = pd.to_datetime(df_listing['ListingDate'])

84 # KRX 주식종목검색

81줄을 다음과 같이 변경함.

---> 81 #df_listing['Code'] = df_listing['Code'].apply(lambda x: '{:06d}'.format(x))

변경 --> df_listing['Code'] = df_listing['Code'].apply(lambda x: x.zfill(6))

 

cufflinks 버전문제로 iplot() 미실행

0

42

2

[수정요청]직접 수집한 주가 데이터로 시각화해보기

0

52

2

pd.read_html(url, encoding='cp949') 에러

0

75

2

fdr.StockListing('KRX') 문제 발생

0

137

2

주식 자동매매 프로그램 제작 관련 조언 부탁드립니다

0

431

1

concat 을 통한 데이터 프레임 합치기 에러 문의

0

105

2

한글폰트 관련해서 문의드립니다.

0

230

2

데이터프레임 칼럼명 문의 드립니다.

0

239

3

금융데이터 수집의 모든것

0

145

2

녹화시점과 현재시점 컬럼명이 변경이 많이 되었을까요?

0

192

2

파이썬 증권 데이터 수집과 분석으로 신호와 소음 찾기 - 섹션1 [2/2]

0

174

1

Mac 환경에서 nbextensions 활성화 하는 방법

0

594

2

pd.concat(result.tolist()) 오류 문의

0

244

1

5.1 제약 데이터 수집 오류 해결

0

231

1

Table of contents 문의드립니다

0

209

2

concat을 통한 데이터프레임 합치기

0

548

2

Reindexing only valid with uniquely valued Index objects 오류 질문입니다.

0

491

1

데이터 비교시 데이터 불일치

0

410

1

dtype={"itemcode": np.object}) 을 dtype={"itemcode": object}) 으로 변경해야 하나요?

0

593

1

질문 : for문 풀어쓰기

0

488

1

파이참에서 Plotly 그래프 실행방법

0

1308

1

5.1 데이터프레임 병합(merge)

0

741

2

쥬피터노트북에서 실행파일 만들기

0

1449

1

주피터노트북 확장팩 설치가 안됩니다.

0

562

2