-
카테고리
-
세부 분야
데이터 분석
-
해결 여부
미해결
fdr.StockListing("KRW") 불러올때 오류가 납니다.
21.04.26 20:56 작성 조회수 363
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으로 들어가서 문제가 생기는듯 합니다. 버전은 선생님 버전이랑 같은데 뭐가 문제인지 몰겠네요
답변을 작성해보세요.
1
박조은
지식공유자2021.09.22
안녕하세요.
질문 주신 내용은 아래 링크에 있는 소스코드에서 난 오류입니다.
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)
haemil
2021.09.22
답변해주셔서 감사합니다 선생님~! 🙏
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'
오류 메시지를 살펴보며 궁금한 것이 생겨서 진행해본 내용인데, 현재까지의 상황은 이렇습니다.
제가 수업을 듣고 있는 부분은 판다스를 다루는 방법을 학습하는 부분이라서 큰 영향은 없을 것 같지만..!
혹시나 제가 잘못하고 있는 부분이 있는지 궁금해서 이렇게 문의를 드려봅니다..!
감사합니다. 🙇🏻♂️
박조은
지식공유자2021.09.22
안녕하세요.
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__ 으로 판다스 버전을 올려주시면 확인해 보겠습니다.
오류제보 감사합니다 :)
haemil
2021.09.23
상세하게 답변해주셔서 감사합니다. 선생님 🙇🏻♂️
판다스 버전을 확인해보니 아래처럼 1.3.3 으로 확인됩니다..!
선생님 덕분에 미지의 영역으로 남아 있던 문제가 이제 손에 잡히는 것처럼 느껴져요!
정말 감사합니다. 🙏
1
박조은
지식공유자2021.04.26
안녕하세요. 버전이 저와 같다면 오타가 있어서 그런것 같아요.
아래 오타가 있어요 KRW => KRX 로 바꿔서 불러와 보세요!
fdr.StockListing("KRW") => fdr.StockListing("KRX")
박조은
지식공유자2021.04.27
안녕하세요. 실습 초반부터 어려움이 많으셨겠어요.
0.9.31 버전 이상을 사용하는 것을 추천하고요.
일단 아래 colab 링크에서 아래 코드의 주석을 풀고 실습을 해보세요.
!pip install -U finance-datareader
그리고 로컬 주피터 노트북에서도 다시 실행해도 오류가 난다면 아래 명령어로 재설치를 해보세요.
!pip uninstall finance-datareader
!pip install finance-datareader --upgrade
haemil
2021.09.21
어떻게 해결하셨는지 여쭈어봐도 될까요? 저도 같은 에러를 겪고 있는데... 처음에 한 번 진행했을 때는 잘 되던 것 같은데 실습해보려고 하니 갑자기 안 되네요 ㅠ...
박조은
지식공유자2021.09.21
안녕하세요. 혹시 위 Colab 으로 실습해도 같은 결과가 나오는지 궁금합니다. 실습하신 소스코드에 대한 스크린샷과 오류 메시지를 함께 올려주시면 도움을 드리겠습니다.
haemil
2021.09.22
선생님께서 공유해주신 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'
```
답변해주셔서 감사합니다. 🙇🏻♂️
답변 2