05. ์น ์คํฌ๋ํ ๊ธฐ์ด ์ตํ๊ธฐ
05. ์น ์คํฌ๋ํ ๊ธฐ์ด ์ตํ๊ธฐ ๊ด๋ จ
01. ํฌ๋กค๋ง ๊ธฐ์ด
ํฌ๋กค๋ง
ํฌ๋กค๋ง์ด๋ ์น ํ์ด์ง๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ ํ์๋ฅผ ๋งํฉ๋๋ค. ๊ทธ๋์ ํฌ๋กค๋งํ๋ ์ํํธ์จ์ด๋ ํฌ๋กค๋ฌ(crawler)๋ผ๊ณ ๋ถ๋ฅด์ง์. ํฌ๋กค๋ง์ ๋ํด์ ๋ณธ๊ฒฉ์ ์ผ๋ก ๋ค์ด๊ฐ๊ธฐ ์ ์, ์ฐ๋ฆฌ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์์งํ ์น์ ๋ํด์ ๋จผ์ ์ดํดํด๋ณด๊ฒ ์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ธํฐ๋ท ์ต์คํ๋ก๋ฌ, ํฌ๋กฌ ๋ฑ๊ณผ ๊ฐ์ '์ธํฐ๋ท ๋ธ๋ผ์ฐ์ '๋ฅผ ์ฌ์ฉํ์ฌ ์ธํฐ๋ท ์ธ์์ ๋์๋ค๋๋๋ค. ์ธํฐ๋ท ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด์ NAVER, FACEBOOK๊ณผ ๊ฐ์ ๊น๋ํ๊ณ ์์ ์น ์ฌ์ดํธ๋ค์ ๋ฐฉ๋ฌธํ ์ ์์ง์. ๊ทธ๋ฐ๋ฐ ์ด ์น ์ฌ์ดํธ๋ค์ ์ค์ HTML์ด๋ผ๋ ์น ๋ฌธ์๋ก ๊ตฌ์ฑ๋์ด์ ธ ์์ต๋๋ค.
HTML
HTML์ด๋ ์น ํ์ด์ง๋ฅผ ๋ง๋ค๊ธฐ ์ํ ์ธ์ด๋ก ์น ๋ธ๋ผ์ฐ์ ์์ ๋์ํ๋ ์ธ์ด์ ๋๋ค.
H
: HyperText, ๋ฌธ์์ ๋ฌธ์๊ฐ ๋งํฌ๋ก ์ฐ๊ฒฐ๋์ด์ ธ ์๋ค.M
: Markup, ํ๊ทธ๋ก ์ด๋ฃจ์ด์ ธ์๋ค.L
: Language
์๋๋ ๊ฐ๋จํ๊ฒ ์์ฑ๋ HTML ๋ฌธ์์ ์์ ์ ๋๋ค
<!DOCTYPE html>
<html>
<head>
<title> HTML ๋ฌธ์ </title>
</head>
<body>
<h1> ์ด๊ฒ์ HTML ๋ฌธ์์
๋๋ค! </h1>
</body>
</html>
HTML ๋ฌธ์๋ ์ ํด์ง ๋ฌธ๋ฒ์ ์ํด์ ์์ฑ๋์ด์ ธ ์์ต๋๋ค. ๋ฌผ๋ก , ๋ค์ด๋ฒ์ ๊ฐ์ ์น ์ฌ์ดํธ๋ค์ HTML ๋ฌธ์๋ ์์ ๊ฐ๋จํ ์์ ๋ณด๋ค๋ ํจ์ฌ ๋ณต์กํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๊ฒ ์ง์? ์น ํ์ด์ง์์ ๋ง์ฐ์ค ์ฐํด๋ฆญ ํ์ '์์ค ๋ณด๊ธฐ'๋ฅผ ํด๋ฆญํ๋ฉด HTML ๋ฌธ์์ ์์ค ์ฝ๋๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
http://www.naver.com ์ผ๋ก ์ด๋ํ์ฌ ์์ค ์ฝ๋๋ฅผ ํ์ธํด๋ด ์๋ค. ์๋๋ ๋ค์ด๋ฒ์ HTML ์์ค ์ฝ๋ ์ค ์ผ๋ถ๋ฅผ ๋ฐ์ทํ์ต๋๋ค.
<div class="direct_area">
<a href="http://news.naver.com/" class="link_news" data-clk="newshome">๋ค์ด๋ฒ๋ด์ค</a>
<a href="http://entertain.naver.com/home" class="link_direct" data-clk="entertainment">์ฐ์</a>
<a href="http://sports.news.naver.com/" class="link_direct" data-clk="sports">์คํฌ์ธ </a>
</div>
์์ ๊ฐ์ด ์๋ง์ ๊บฝ์ ๋ค์ ์กฐํฉ์ผ๋ก ๊ตฌ์ฑ๋ ๊ฒ๋ค์ ํ๊ทธ(Tag) ๋ผ๊ณ ํฉ๋๋ค. ์์ HTML ์ฝ๋๋ ์ฌ๋ฌ ๊ฐ์ ์ค์ฒฉ๋ ํ๊ทธ๋ก ๊ตฌ์ฑ๋์ด์ ธ ์๋ ์
์ด์ฃ . <div>
ํ๊ทธ, <a>
ํ๊ทธ ๋ฑ๊ณผ ๊ฐ์ด์.
ํ๊ทธ(Tag)
ํ๊ทธ๋ ์ ๋ณด๋ฅผ ์ ์ํ๋ ํ์์ ๋งํด์. ์ผ๋ฐ์ ์ธ ํ๊ทธ์ ํ์์ ๋ด ์๋ค.
<ํ๊ทธ๋ช
์์ฑ๋ช
1="์์ฑ๊ฐ1" ์์ฑ๋ช
2="์์ฑ๊ฐ2"> ์ฝํ
์ธ </ํ๊ทธ๋ช
>
ํ๊ทธ๋ ์ฝํ ์ธ ๋ฅผ ๊ฐ์ธ์ ๊ทธ ์ ๋ณด์ ์ฑ๊ฒฉ๊ณผ ์๋ฏธ๋ฅผ ์ ์ํฉ๋๋ค.
02. BeautifulSoup
๊ฐ๋จํ ์ค์ต์ ํตํด BeautifulSoup4์ ์ฌ์ฉ๋ฒ์ ์ตํ๋ด
์๋ค. ์ค์นํ ๋๋ beautifulSoup4๋ผ๋ ์ด๋ฆ์ผ๋ก ์ค์นํ์ง๋ง, ์ํฌํธํ ๋๋ from bs4
๋ผ๊ณ ์ ์ด์ฃผ์
์ผ ํฉ๋๋ค. ์ค์นํ ๋์ ์ด๋ฆ๊ณผ ์ํฌํธํ ๋์ ํจํค์ง ์ด๋ฆ์ด ํญ์ ๋์ผํ์ง๋ ์์ต๋๋ค. ์ด๋ BeautifulSoup๋ผ๋ ํจํค์ง์์ ์ ํ ๊ท์น์ด๋๊น ๋ฐ๋ผ์ฃผ์ธ์.
pip install beautifulSoup4
# bs4๋ผ๋ ํจํค์ง๋ก๋ถํฐ BeautifulSoup๋ผ๋ ๋ชจ๋์ ์ํฌํธ
from bs4 import BeautifulSoup
# HTML ๋ฌธ์๋ฅผ ๋ฌธ์์ด html๋ก ์ ์ฅ
html = '''
<html>
<head>
</head>
<body>
<h1> ์ฅ๋ฐ๊ตฌ๋
<p id='clothes' class='name' title='๋ผ์ด๋ํฐ'> ๋ผ์ด๋ํฐ
<span class = 'number'> 25 </span>
<span class = 'price'> 29000 </span>
<span class = 'menu'> ์๋ฅ</span>
<a href = 'http://www.naver.com'> ๋ฐ๋ก๊ฐ๊ธฐ </a>
</p>
<p id='watch' class='name' title='์๊ณ'> ์๊ณ
<span class = 'number'> 28 </span>
<span class = 'price'> 32000 </span>
<span class = 'menu'> ์
์ธ์๋ฆฌ </span>
<a href = 'http://www.facebook.com'> ๋ฐ๋ก๊ฐ๊ธฐ </a>
</p>
</h1>
</body>
</html>
'''
# BeautifulSoup ์ธ์คํด์ค ์์ฑ. ๋๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ ๋ถ์ํ ๋ถ์๊ธฐ(parser)์ ์ข
๋ฅ.
soup = BeautifulSoup(html, 'html.parser')
๋งจ ์๋ซ ์ค์ ์๋ ์ฝ๋๋ฅผ ๋ณผ๊น์? BeautifulSoup(์
๋ ฅ ๋ฌธ์์ด, 'html.parser')
๋ผ๋ ์ฝ๋๋ ์ด ์
๋ ฅ์ HTML ๋ฌธ๋ฒ์ผ๋ก ์์ฑ๋์ด์ ธ ์์ผ๋ HTML ๋ฌธ๋ฒ์ ๊ธฐ๋ฐ์ผ๋ก ํ์ฑํ๋ผ๋ ์๋ฏธ์
๋๋ค. ์ด๋ ๊ฒ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ๋๋ฉด ๋ณธ๊ฒฉ์ ์ผ๋ก ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ select()
๋ฅผ ๊ฐ์ง๊ณ ์ํํฉ๋๋ค.
์ธ์คํด์ค์ ์ด๋ฆ์ soup์ด๋ฏ๋ก soup.select()
๋ฅผ ํตํด์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ต๋๋ค. select()
์ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์์ฝํ์๋ฉด soup.select('์ฐพ๋ ์ ๋ณด')
์
๋๋ค. ๊ตฌ์ฒด์ ์ธ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
soup.select('ํ๊ทธ๋ช ')
: ํ๊ทธ๋ฅผ ์ ๋ ฅ์ผ๋ก ์ฌ์ฉํ ๊ฒฝ์ฐsoup.select('.ํด๋์ค๋ช ')
: ํด๋์ค๋ฅผ ์ ๋ ฅ์ผ๋ก ์ฌ์ฉํ ๊ฒฝ์ฐsoup.select('#์์ด๋')
: ID๋ฅผ ์ ๋ ฅ์ผ๋ก ์ฌ์ฉํ ๊ฒฝ์ฐsoup.select('์์ํ๊ทธ ํ์ํ๊ทธ')
: ์์ ๊ด๊ณ (๋์ด์ฐ๊ธฐ)soup.select('์์ํ๊ทธ > ํ์ํ๊ทธ')
: ์์ ๊ด๊ณ (>
)
์ค์ต์ ํตํด ์ดํดํด๋ณผ๊น์? ํ๊ทธ๋ช
<body>
๋ฅผ ์
๋ ฅ์ผ๋ก ๋ด๋ถ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์๋ณด๊ฒ ์ต๋๋ค.
# <body> ํ๊ทธ๋ฅผ ์
๋ ฅ
print(soup.select('body'))
#
# [<body>
# <h1> ์ฅ๋ฐ๊ตฌ๋
# <p class="name" id="clothes" title="๋ผ์ด๋ํฐ"> ๋ผ์ด๋ํฐ
# <span class="number"> 25 </span>
# <span class="price"> 29000 </span>
# <span class="menu"> ์๋ฅ</span>
# <a href="http://www.naver.com"> ๋ฐ๋ก๊ฐ๊ธฐ </a>
# </p>
# <p class="name" id="watch" title="์๊ณ"> ์๊ณ
# <span class="number"> 28 </span>
# <span class="price"> 32000 </span>
# <span class="menu"> ์
์ธ์๋ฆฌ </span>
# <a href="http://www.facebook.com"> ๋ฐ๋ก๊ฐ๊ธฐ </a>
# </p>
# </h1>
# </body>]
๋ด๋ถ์ ์ ๋ณด๋ค์ ๋ชจ๋ ๊ฐ์ ธ์จ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
์ด๋ฒ์๋ ์์ ๊ด๊ณ๋ฅผ ์
๋ ฅ์ผ๋ก ํ์ฌ class
๊ฐ menu
์ธ ๊ฒฝ์ฐ๋ง์ ์ถ๋ ฅํด๋ณด๊ฒ ์ต๋๋ค. ํ๊ทธ๋ช
h1
์์์ธ ํด๋์ค .name
์ ์์์ธ ํด๋์ค .menu
์ ์ ๋ณด๋ฅผ ์ฐพ์ผ๋ฉด?
print(soup.select('h1 .name .menu'))
#
# [<span class="menu"> ์๋ฅ</span>, <span class="menu"> ์
์ธ์๋ฆฌ </span>]
class
๊ฐ menu
์ธ ๋ถ๋ถ์ ์ ๋ณด๋ฅผ ์ ๊ฐ์ ธ์จ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
์ด๋ฒ์๋ ์๋์ ์ผ๋ก ์๋ชป๋ ์
๋ ฅ์ ๋ฃ์ด๋ณผ๊ฒ์. ํ๊ทธ๋ช
h1
์ ํ๊ทธ๋ช
html์ ์์์ด๊ธฐ๋ ํ์ง๋ง, ์์์ ์๋๋๋ค. ๋ง์ฝ, html ์์์ธ h1
์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ผ๊ณ ํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
print(soup.select('html > h1'))
# []
์๋ฌด๋ฐ ์ ๋ณด๋ ์ถ๋ ฅ๋์ง ์์ต๋๋ค.
03. pd.read_html()
์ ํตํ ํ
๋ง์ฃผ ์ถ์ถ
pd.read_html
์ ์น ํ์ด์ง๋ก๋ถํฐ ํ
์ด๋ธ์ ์ถ์ถํ์ฌ ๋ฐ์ดํฐํ๋ ์์ผ๋ก ์ ์ฅํ๋ ์ฝ๋์
๋๋ค.
pd.read_html('ํ ์ด๋ธ์ด ์กด์ฌํ๋ URL')
๊ธ์ต ๊ด๋ จ ์ฌ์ดํธ ํ๋๋ฅผ ์ ํํ์ฌ ์์๋ฅผ ๋ค์ด์ ์ค๋ช ํด๋ณด๊ฒ ์ต๋๋ค.
๋งํฌ: http://m.infostock.co.kr/sector/sector.asp?mode=w
์๋ฅผ ๋ค์ด ์ ์ฌ์ดํธ๋ ํ ๋ง์ ํด๋น ํ ๋ง๋ค์ ๋ํ ์ข ๋ชฉ์ ์๋ ค์ฃผ๋ ์ฌ์ดํธ์ ๋๋ค. ํด๋น ์ฌ์ดํธ์์ '2์ฐจ ์ ์ง ํ ๋ง์ฃผ ๋งํฌ'๋ก ์ด๋ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋งํฌ: http://m.infostock.co.kr/sector/sector_detail.asp?code=64&theme=2%uCC28%uC804%uC9C0&mode=w
ํด๋น ๋งํฌ์ ๋ํด์ pd.read_html()
์ ์ํํด๋ณผ๊น์?
import pandas as pd
pd.read_html('http://m.infostock.co.kr/sector/sector_detail.asp?code=64&theme=2%uCC28%uC804%uC9C0&mode=w')
#
# [ 0 1 2 3 4
# 0 NaN NaN NaN ํ์๊ฐ์
NaN,
# 0 1
# 0 ํ
๋ง๋ช
2์ฐจ์ ์ง
# 1 ํ
๋ง๊ฐ์ 2์ฐจ์ ์ง(Secondary battery)๋ ํ ๋ฒ ์ฐ๊ณ ๋ฒ๋ฆฌ๋ ๋ฐฐํฐ๋ฆฌ๊ฐ ์๋ ์ฌ์ถฉ...
# 2 ํ
๋ง ํ์คํ ๋ฆฌ (2022-07-22) ํ
์ฌ๋ผ, ์ค์ ํธ์กฐ์ ๋ฐ๋ฅธ ์ฃผ๊ฐ ๊ธ๋ฑ ์ํฅ ๋ฑ์ ์์น(์ฃผ๋์ฃผ...
# 3 ๊ด๋ จ์ข
๋ชฉ ํ
๋งํธ์
์ฌ์
# 4 - LG์๋์ง์๋ฃจ์
(373220) LG๊ทธ๋ฃน ๊ณ์ด์ ์ ์ง์ฌ์
์ ๋ฌธ ์
์ฒด. LGํํ์ ์ ์ง์ฌ์
๋ถ๋ฌธ์ด ๋ฌผ์ ๋ถํ ๋์ด ์ค๋ฆฝ๋...
# .. ... ...
# 96 - ์์ผ (348370) 2์ฐจ์ ์ง ๋ฐ EDLC์ฉ ์ ํด์ก, ์ฒจ๊ฐ์ ์ ์กฐ ๋ฐ ํ๋งค์
์ฒด. ์ํ 2์ฐจ์ ์ง์ฉ ์ ํด์ก(...
# 97 - ์์์ด์์ค (138690) 22๋
1์ 2์ฐจ์ ์ง ์์ฅ ์ง์ถ์ ์ํด ์ ๊ธฐ์ฐจ ๋ฐฐํฐ๋ฆฌํฉ ํ์ฌ ํฐ์๋ ์ง๋ถ ์ธ์. ํฐ์...
# 98 - ์ธ์๋ฉ์นด๋์ค (396300) ์๋ฅ๋ฏธ๋ ๋ค์ด์บ์คํ
์ ๋ฌธ ์
์ฒด. LG์๋์ง์๋ฃจ์
๊ณผ ํ๋ ฅ ๊ด๊ณ๋ฅผ ๋งบ์ผ๋ฉฐ ๋ฏธ๋ํ ์ ๊ธฐ์ฐจ...
# 99 - ์ด์ํ๋ฌ์ค (074610) 21๋
4์ ๊ทธ๋ํ๊ณผ CNT๋ฅผ ๊ฒฐํฉํ ๋ณตํฉ ๋์ ์ฌ ๊ฐ๋ฐ ์ฑ๊ณต. 22๋
5์ ๊ทธ๋ฆฌ๋์ง์ ...
# 100 - ๋ ๋ชฌ (294140) 22๋
6์ ๊ณ ๊ฐ๋, ์ด ์์ ์ฑ, ๋ฐ๋งํ์ ์ ๊ธฐ์๋์ฐจ์ฉ ๊ณ ์ฒด ์ ์ง ์ ํด์ง ์ง์ง์ฒด ๊ฐ๋ฐ...
#
# [101 rows x 2 columns]]
ํด๋น ์ฃผ์์ ์๋ ํ
์ด๋ธ๋ค์ ๊ฐ์ ธ์จ ๊ฒ์ฒ๋ผ ๋ณด์
๋๋ค. pd.read_html()
์ํ ํ์๋ ํด๋น ์ฃผ์์ ์๋ ํ
์ด๋ธ๋ค์ ๋ชจ๋ ์์งํ์ฌ ํ
์ด๋ธ๋ค์ ๋ฆฌ์คํธ๋ฅผ ๋ฐํํ๋ฏ๋ก ํ
์ด๋ธ์ ๋ช ๊ฐ ๊ฐ์ ธ์๋์ง ํ์ธํด์ผ ํฉ๋๋ค.
len(pd.read_html('http://m.infostock.co.kr/sector/sector_detail.asp?code=64&theme=2%uCC28%uC804%uC9C0&mode=w'))
#
# 2
2๊ฐ๋ฅผ ๊ฐ์ ธ์๋ค๊ณ ๋์ต๋๋ค. ์ฒซ๋ฒ์งธ ํ ์ด๋ธ์ ํ์ธํด๋ด ์๋ค.
pd.read_html('http://m.infostock.co.kr/sector/sector_detail.asp?code=64&theme=2%uCC28%uC804%uC9C0&mode=w')[0]
์ฒซ๋ฒ์งธ ํ ์ด๋ธ์ ๋ณ ๋ค๋ฅธ ์๋ฏธ๊ฐ ์์ต๋๋ค. ๋๋ฒ์งธ ํ ์ด๋ธ์ ์ถ๋ ฅํด๋ด ์๋ค.
pd.read_html('http://m.infostock.co.kr/sector/sector_detail.asp?code=64&theme=2%uCC28%uC804%uC9C0&mode=w')[1]
์ค์ง์ ์ผ๋ก ์ฐ๋ฆฌ๊ฐ ์ํ๋ ํ ์ด๋ธ์ ํด๋น๋ฉ๋๋ค. ํ ๋ง์ฃผ ํ ์ด๋ธ์ด ์์ง๋์์ต๋๋ค. ๊ฐ๋จํ ์ ์ฒ๋ฆฌ๋ฅผ ํตํด์ 2์ฐจ ์ ์ง์ ๋ํ ํ ์ด๋ธ. ์ฆ, ๊น๋ํ ๋ฐ์ดํฐํ๋ ์์ ์ป์ด๋ด ์๋ค. ์ฐ์ ์ ํ ์ด๋ธ์์ ์์ 3๊ฐ์ ํ์ ์ ๊ฑฐํด๋ณด๊ฒ ์ต๋๋ค. ๋ถํ์ํ ํ ๋ง๋ช , ํ ๋ง๊ฐ์, ํ ๋ง ํ์คํ ๋ฆฌ์ ๋ํ ํ์ ๋ ๋ฆฌ๋ ค๊ณ ํ๋ ๊ฒ์ ๋๋ค.
df = pd.read_html('http://m.infostock.co.kr/sector/sector_detail.asp?code=64&theme=2%uCC28%uC804%uC9C0&mode=w')[1]
df = df[3:] # ์์ 3๊ฐ์ ํ ์ ๊ฑฐ
df
์์ ์์ 3๊ฐ์ ํ์ด ์ ๊ฑฐ๋์์ต๋๋ค. ์ฒซ๋ฒ์งธ ํ์ ๋ฐ์ดํฐํ๋ ์์ ์ด ์ ๋ชฉ์ผ๋ก ์ฐ๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. df.iloc[์ธ๋ฑ์ค]๋ฅผ ํตํด์ ํน์ ํ์ ์ถ์ถ ๊ฐ๋ฅํฉ๋๋ค. ์ฒซ๋ฒ์งธ ํ. ์ฆ, 0๋ฒ ์ธ๋ฑ์ค๋ฅผ ํตํด ์ฒซ๋ฒ์งธ ํ์ ์ถ์ถํด๋ด ์๋ค.
df.iloc[0]
#
# 0 ๊ด๋ จ์ข
๋ชฉ
# 1 ํ
๋งํธ์
์ฌ์
# Name: 3, dtype: object
์ด๋ฅผ ํ์ด์ฌ ๋ฆฌ์คํธ๋ก ๋ณํํด์ค๋๋ค.
df.iloc[0].to_list()
#
# ['๊ด๋ จ์ข
๋ชฉ', 'ํ
๋งํธ์
์ฌ์ ']
df.columns = ๋ฆฌ์คํธ
๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐํ๋ ์์ ์ด ์ด๋ฆ๋ค์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
df.columns = df.iloc[0].to_list()
df
์ด์ ์ฒซ๋ฒ์งธ ํ์ ์ด ์ ๋ชฉ์ด ๋์์ผ๋ฏ๋ก ์์ง ๋จ์์๋ ์ฒซ๋ฒ์งธ ํ์ ๋ ๋ฆฝ๋๋ค.
df = df[1:]
df
๋ฐ์ดํฐํ๋ ์์ ์์ ๋ถ์ ์ธ๋ฑ์ค๊ฐ 4๋ถํฐ ์์ํ๊ณ ์์ต๋๋ค. ์ด๋ ์ฐ๋ฆฌ๊ฐ ์์์ ์ด 4๊ฐ์ ํ์ ๋ ๋ ธ๊ธฐ ๋๋ฌธ์ธ๋ฐ์. ๋ฐ์ดํฐํ๋ ์์ ์ธ๋ฑ์ค์ ์ซ์์ ์์๊ฐ ์ ๋ ฌ ๊ณผ์ , ๋๋ ์ผ๋ถ ํ์ ์ญ์ ํ๋ ๊ณผ์ ์์ ์์๊ฐ ๋ค์ฃฝ๋ฐ์ฃฝ์ด ๋์๋ค๋ฉด ์ธ๋ฑ์ค๋ฅผ ์ฒ์๋ถํฐ ๋ค์ ์ฌํ ๋นํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
df = df.reset_index(drop=True)
df