[python] pandas를 이용하여 데이타 가져오기
데이타 가져오기
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)