[python] pandas를 이용하여 데이타 가져오기 updated_at: 2024-12-14 03:43

데이타 가져오기

html에 있는 테이블 가져오기

pandas.read_html(url, match='.+', flavor=None, header=None, index_col=None, skiprows=None, attrs=None, parse_dates=False, tupleize_cols=None, thousands=', ', encoding=None, decimal='.', converters=None, na_values=None, keep_default_na=True, displayed_only=True)

  • url : 대상 url 입력
  • match : str or compiled regular expression, optional

정규표현식 또는 문자열을 이용해서 전체 테이블을 가져오지말고 원하는 내용이 들어있는 테이블만 가져오게 함.

  • flavor = None / 'bs4' / 'html5lib'

html을 parsing할 engine 선택. None일 경우 'lxml'으로 시도된 후, 실패하면 bs4 + html5lib으로 수행된다.

  • header = int or list-like or None, optional

header로(열 이름) 쓸 행을 지정할 수 있다.

  • encoding = str or None, optional

인코딩 설정. 한글이 깨져서 나올 때 encoding = 'utf-8'으로 설정하면 된다.

  • pd version >= 2.x
import pandas as pd
from io import StringIO

page = requests.get(url, headers=...)
html_buffer = StringIO(page.text)
tables = pd.read_html(html_buffer)
  • pd version < 2.x

FutureWarning: Passing literal html to 'read_html' is deprecated and will be removed in a future version. To read from a literal string, wrap it in a 'StringIO' object.

import pandas as pd
df = pd.read_html('https://onstory.fun/page', header=0, encoding='utf-8')
> 결과 출력 : [데이터프레임(표1), 데이터프레임(표2), 데이터프레임(표3)]

html로 저장된 xls 데이터 가져오기

pd.read_html()

import pandas as pd

file = 'c:\\폴더명\\파일명.xls'

# CSV 파일 가져오기
df = pd.read_html(file)[0]

엑셀 데이타 가져오기

pd.read_excel()

import pandas as pd

file = 'c:\\폴더명\\파일명.xlsx'

# 시트 지정 안하면 첫 번째 시트를 가져옴.
df = pd.read_excel(file)

# 시트 이름 지정하여 가져오기
df = pd.read_excel(file, sheet_name = 'Sheet1')

# 시트 순서로 가져오기
df = pd.read_excel(file, sheet_name = 0)

# 행 인덱스를 지정하며 가져오기
df = pd.read_excel(file, sheet_name = 0, index_col = 0)

# 열 인덱스를 지정하며 가져오기
df = pd.read_excel(file, sheet_name = 0, header = 0)     # 기본적으로 첫 번째 행을 열 인덱스로 사용함.

# 원하는 컬럼만 가져오기
df = pd.read_excel(file, sheet_name = 0, usecols = 'A')
df = pd.read_excel(file, sheet_name = 0, usecols = ['A','C'])

# 처음 몇 줄 제외하고 가져오기
df = pd.read_excel(file, sheet_name = 0, skiprows = 4)

# 원하는 여러 컬럼 가져오기
df = pd.read_excel(file, sheet_name = 0, usecols = [0,2])

# 다양한 옵션
df = pd.read_excel(file,
                    sheet_name = '시트이름' or 시트번호 (기본 0),
                    index_col = '열이름' or 열번호,
                    header = 숫자 (기본 0) or None,
                    names = ['열이름1','열이름2','열이름3']
                    )

csv 데이타 가져오기

pd.read_csv()

import pandas as pd

file = 'c:\\폴더명\\파일명.csv'

# CSV 파일 가져오기
df = pd.read_csv(file)        # 기본 구분자는 쉼표

# 구분기호 지정하여 가져오기
df = pd.read_csv(file, " ")   # 탭은 \t 로 표현

# 가져오는 행 수 지정하기
df = pd.read_csv(file, " ", nrows = 2)    # 컬럼명 제외하고 2줄

# 인코딩 형식 지정하기 (주로 UTF-8과 euc-kr, cp949. 기본은 UTF-8)
df = pd.read_csv(file, " ", nrows = 2, encoding = "utf-8")
df = pd.read_csv(file, " ", nrows = 2, encoding = "euc-kr")

# 파일 경로 한글 있을 때 오류가 발생한다면 (read_csv 메소드의 기본 파싱 언어가 C언어이기 때문. 파일형식 UTF-8일때 인코딩 형식은 utf-8-sig임.)
df = pd.read_csv(file, " ", engine = "python", nrows = 2, encoding = "utf-8-sig")

# 다양한 옵션
df = pd.read.csv(file,
                    encoding = 'cp949',
                    index_col = '열 이름 또는 숫자',
                    header = 숫자 또는 None (기본은 0),
                    sep = 구분자 (기본은 콤마),
                    names = 열 이름 리스트
                    )
# names로 열 이름 지정시 기존 열 이름 행이 있다면 header를 해당 행으로 지정하면 되고
# 기존에 열 이름이 없이 값 내용만 들어있다면 header를 None으로 하면 됨.

# CSV 파일은 엑셀과 동일한 방법으로 행과 열 인덱스를 설정하여 가져오는 열 지정 가능.

mysql

pd.DataFrame()

import pandas as pd
......
rs = curs.fetchall() # mysql에서 데이타를 가져온다.
df = pd.DataFrame(rs)

아래와 같이 데이타를 append 하는 방식으로도 가능하다

df = pd.DataFrame()
for row in rows:
  df = df.append(row['price'], ignore_index=True)
평점을 남겨주세요
평점 : 5.0
총 투표수 : 1

질문 및 답글