-
[python] 파이썬을 이용한 빅 데이터 실습 8 - 데이터 입출력카테고리 없음 2021. 11. 1. 14:23반응형
외부에서 제공해주는 데이터 사용하기
파일에서 데이터 읽어오기
import pandas as pd from pandas import Series, DataFrame
csv파일 데이터 입출력
csv 파일 읽기 - read_csv()
파일은 현재 사용하는 쥬피터 실습 파일이 넣어진 파일 안에
ex1의 파일이 존재한단 하의 실습입니다.
보통은 c드라이브에 들어있습니다.
pd.read_csv('data/ex1.csv')
실행결과
a b c d message 0 1 2 3 4 hello 1 5 6 7 8 world 2 9 10 11 12 foo
sep인자 활용하기
각각을 columns으로 쪼개고 싶을 때 인자값(sep)을 사용
- 특정 구분자를 기준으로 필드들이 구분되어 있는 csv형태의 파일은
모두 처리 가능하므로 파일의 확장자는 상관이 없다
pd.read_csv('data/ex2.txt', sep=' ')
실행결과
a b c d message 0 1 2 3 4 hello 1 5 6 7 8 world 2 9 10 11 12 foo
encoding 인자 활용하기
-여기서부터는 실행결과가 너무 길어서 생략하겠습니다
소스를 주의해주세요!
해당 파일은 문자열이 인코딩하는 방식과 맞지 않으면 에러가 뜬다
그럴때 ecoding 인자를 활용 윈도위 계열의 경우 cp949를 사용한다
pd.read_csv('data/2020KBO야구.csv', encoding='cp949')
header, names 인자 활용하기 (컬럼명이 파일에 포함되어 있지 않은 경우)
컬럼명이 포함되어 있지 않은 경우(데이터만 있는 경우)
header 인자 활용하기 : 컬럼명으로 사용할 라인 지정
기본값: 0 (첫번 째 줄은 컬럼명으로 활용하라는 의미)
None : 컬럼명이 없음을 의미. 즉, 첫번째 줄부터 데이터로 읽기
2개 줄이 컬럼명으로 사용하는 경우, 리스트 형태로 지정
ex) header = [0,1]
pd.read_csv('data/2020KBO야구_컬럼명미포함.csv', encoding='cp949', header = None)
name 인자 활용하기 : 컬럼을 명시적으로 지정
기본적으로 컬럼명은 파일에 포함되어 있지 않기 때문에
이 인자값을 컬럼명으로 지정하고, 파일의 첫번째 줄부터 데이터로 읽음
pd.read_csv('data/2020KBO야구_컬럼명미포함.csv', encoding='cp949', names = ['선수명','팀명','타율','안타','홈런','연봉'])
불필요한 줄은 제외하고 데이터 읽기
skiprows을 이용하여, 특정 행을 읽지 않도록 한다
pd.read_csv('data/2020KBO야구_주석포함.csv', encoding='cp949', skiprows = [0,1,2], names = ['선수명','팀명','타율','안타','홈런','연봉'])
comment 인자를 이용하여, 주석은 데이터로 읽지 않는다
pd.read_csv('data/2020KBO야구_주석포함.csv', encoding='cp949', comment = '*', names = ['선수명','팀명','타율','안타','홈런','연봉'])
비어 있는 줄의 경우 기본적으로 데이터를 읽지 않도록 설정되어 있다
비어 있는 줄을 읽을 경우 : skip_blank_lines = False
pd.read_csv('data/2020KBO야구_주석포함.csv', encoding='cp949', comment = '*', names = ['선수명','팀명','타율','안타','홈런','연봉'], skip_blank_lines=False)
용량이 매우 큰 파일 읽기
데이터를 한 번에 읽어서 데이터프레임으로 저장해 오는 것이 불가능 할 수 있다
파일의 크기가 컴퓨터의 성능(가용 메모리 크기)보다 크면,
Out Of Memory(OOM) Error 발생
nrows
- 기본적으로 앞에 있는 데이터만 읽어 올 수 있다
pd.read_csv('data/2020KBO야구.csv', encoding='cp949', nrows = 10)
chunksize
- 지금까지 실행해 본 read.csv() 함수는 파일을 읽은 내용을
데이터프레임 형태로 반환해 주었다
chunksize 인자
파일을 읽을 준비가 되어 있는 텍스트 파일 리더(TextFileReader)라는 객체를 리턴
chunksize의인자값으로 리턴된 객체를 변수(커서)에 담아 놓음
next(커서) : chunksize 개수만큼 데이터를 읽어 온다
커서 = pd.read_csv('data/2020KBO야구.csv', encoding='cp949', chunksize = 10) next(커서)
끊어서 읽어 온 데이터 저장하기
데이터 목록 변수에 빈(empty) 리스트 할당
루프문에 커서를 활용할 수 있다
next(커서)가 호출되면서 변수(data)에 저장
데이터목록 변수에 data를 append
데이터목록 = [] for data in 커서 : 데이터목록.append(data)
결과를 csv 파일로 저장하기 - to_csv()
data = pd.read_csv('data/2020KBO야구.csv', encoding='cp949') result = data.pivot_table(index='팀명',values='안타',aggfunc='sum') result.to_csv('data/팀별안타수.csv',encoding='cp949')
저장완룟 ~~
excel 파일의 입출력
excel 파일 읽기 - read_excel()
pd.read_excel('data/2020KBO야구.xlsx')
첫 번째 sheet가 아닌 원하는 sheet을 읽어 오기
sheet_name = 0 (기본값) : 첫 번째 sheet의 데이터를 읽어 옴
sheet_name = 1 : 두 번째 sheet의 데이터를 읽어 옴
- 숫자 대신 sheet 의 이름을 넣을 수도 있다
pd.read_excel('data/2020KBO야구.xlsx', sheet_name = 1)
2개 이상의 시트 데이터를 읽어 올때는 사전타입의 데이터로 리턴한다
data = pd.read_excel('data/2020KBO야구.xlsx', sheet_name = ['LG','두산']) data
전체 sheet 읽어 오기
sheet_name에 리스트 형태로 모두 작성하거나 None 으로 작성
2개 이상의 sheet이므로 사전(Dict)형태
야구데이터 = pd.read_excel('data/2020KBO야구.xlsx', sheet_name = None) 두산, SK, NC, LG, KT, KIA, 한화, 키움, 롯데, 삼성 = 야구데이터.values()
결과를 excel 파일로 저장하기 - to_xlsx()
두산.to_excel('data/두산데이터.xlsx')
두둥! 작성완룟
반응형