본문 바로가기
Python/증권 데이터 분석

판다스(pandas) read_html() 함수로 엑셀파일 읽기, 사이트 파일 읽어오기

by grey-hat hacker 2021. 1. 4.
728x90

1. 무엇을 할 것인가?

한국거래소 기업공시채널(kind.krx.co.kr)에서 제공하는 엑셀 파일 읽기를 해보자!! 

일단 저 사이트에 접속 

 (kind.krx.co.kr) -> 상장법인상세정보 -> 상장법인목록 -> excel 파일 다운로드 

excel 파일을 열면 아래와 같이 표시된다. 

 

 -> 그래서 read_excel() 함수를 사용해야 할 것 같지만

 해당 파일을 메모장으로 열어보면 아래와 같이 html 파일로 이루어진 것을 알 수 있다. 

따라서 팬더스의 read_html() 함수를 이용하여 파일을 읽어야 한다. 

2. 선행과정 

 

read_html() 함수를 호출 하기 위해 필요 라이브러리를 설치해 준다. 

C:\Users\user\AppData\Local\Programs\Python>pip install html5lib
C:\Users\user\AppData\Local\Programs\Python>pip install lxml

read_html 함수는  HTML 파일 내부에 존재하는 TABLE 태그를 분석하여 데이터프레임으로 변환하여 준다.

 

3. 엑셀파일 읽어오기 

그럼 함수를 이용해 엑셀 파일을 읽어와 보자

>>> import pandas as pd
>>> krx_list = pd.read_html('C:/Users/user/Desktop/상장법인목록.xls')
>>> krx_list[0]
             회사명    종목코드  ...                          홈페이지       지역
0           나우코스  257990  ...        http://www.nowcos.com/  세종특별자치시
1          에이스캠퍼  322190  ...       http://acecamper.co.kr/     충청남도
2       유안타제7호스팩  367460  ...                           NaN    서울특별시
3            루트락  253610  ...           http://rootloc.com/    서울특별시
4     ESR켄달스퀘어리츠  365550  ...     http://www.esrks-reit.com    서울특별시
...          ...     ...  ...                           ...      ...
2406      CJ대한통운     120  ...    http://www.cjlogistics.com    서울특별시
2407       메리츠화재      60  ...     http://www.meritzfire.com    서울특별시
2408          경방      50  ...    http://www.kyungbang.co.kr    서울특별시
2409       유수홀딩스     700  ...  http://www.eusu-holdings.com    서울특별시
2410    한진중공업홀딩스    3480  ...  http://www.hhic-holdings.com      경기도

[2411 rows x 9 columns]

근데 보면 종목코드에서 원래는 000120 이런식으로 6자리 여야 하는데.. 

앞자리 0이 다 생략이 되었다. 그래서 map() 함수 사용

 // map() 인수로 받은 함수를 이용 값을 변경 아래 내용을 적용시키는 함수 

'{:06d}'.format = 여섯 자리 숫자 형식으로 표현, 빈 앞자리는 0으로 채우라~

>>> krx_list[0].종목코드 = krx_list[0].종목코드.map('{:06d}'.format)
>>> krx_list[0]
             회사명    종목코드  ...                          홈페이지       지역
0           나우코스  257990  ...        http://www.nowcos.com/  세종특별자치시
1          에이스캠퍼  322190  ...       http://acecamper.co.kr/     충청남도
2       유안타제7호스팩  367460  ...                           NaN    서울특별시
3            루트락  253610  ...           http://rootloc.com/    서울특별시
4     ESR켄달스퀘어리츠  365550  ...     http://www.esrks-reit.com    서울특별시
...          ...     ...  ...                           ...      ...
2406      CJ대한통운  000120  ...    http://www.cjlogistics.com    서울특별시
2407       메리츠화재  000060  ...     http://www.meritzfire.com    서울특별시
2408          경방  000050  ...    http://www.kyungbang.co.kr    서울특별시
2409       유수홀딩스  000700  ...  http://www.eusu-holdings.com    서울특별시
2410    한진중공업홀딩스  003480  ...  http://www.hhic-holdings.com      경기도

[2411 rows x 9 columns]

 

4. url 경로를 이용한 엑셀 파일 읽어오기

엑셀파일을 다운 받지 않고 직접 경로를 입력하여 데이터를 가져오는 방법도 있다.

>>> df = pd.read_html('http://kind.krx.co.kr/corpgeneral/corpList.do?method=download&searchType=13')[0]
>>> df['종목코드'] = df['종목코드'].map('{:06d}'.format)
>>> df = df.sort_values(by= '종목코드')
>>> df
         회사명    종목코드  ...                             홈페이지     지역
924     동화약품  000020  ...        http://www.dong-wha.co.kr  서울특별시
1502   KR모터스  000040  ...          http://www.krmotors.com   경상남도
1507      경방  000050  ...       http://www.kyungbang.co.kr  서울특별시
1529   메리츠화재  000060  ...        http://www.meritzfire.com  서울특별시
36     삼양홀딩스  000070  ...           http://www.samyang.com  서울특별시
...      ...     ...  ...                              ...    ...
2355  코오롱티슈진  950160  ...            http://tissuegene.com     미국
705      JTC  950170  ...  http://www.groupjtc.com/korean/     일본
1007     SNK  950180  ...        http://www.snk-corp.co.jp     일본
1631     미투젠  950190  ...            http://www.me2zen.com     홍콩
1654     소마젠  950200  ...                              NaN     미국

[2411 rows x 9 columns]

sort_values 종목 칼럼을 기준으로 오름차순 정렬했다. 기본 오름차순 정렬이고

ascending=False 함수를 이용하면 내림차순 정렬된다.

>>> df = df.sort_values(by= '종목코드', ascending=False)
>>> df
         회사명    종목코드  ...                             홈페이지     지역
1654     소마젠  950200  ...                              NaN     미국
1631     미투젠  950190  ...            http://www.me2zen.com     홍콩
1007     SNK  950180  ...        http://www.snk-corp.co.jp     일본
705      JTC  950170  ...  http://www.groupjtc.com/korean/     일본
2355  코오롱티슈진  950160  ...            http://tissuegene.com     미국
...      ...     ...  ...                              ...    ...
36     삼양홀딩스  000070  ...           http://www.samyang.com  서울특별시
1529   메리츠화재  000060  ...        http://www.meritzfire.com  서울특별시
1507      경방  000050  ...       http://www.kyungbang.co.kr  서울특별시
1502   KR모터스  000040  ...          http://www.krmotors.com   경상남도
924     동화약품  000020  ...        http://www.dong-wha.co.kr  서울특별시

[2411 rows x 9 columns]

 

- 모든 내용은 파이썬 증권 데이터 분석 책을 공부하며 작성해보았습니다. 

 

728x90
반응형

댓글