카테고리 없음

[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')

 

 

두둥! 작성완룟

 

 

 

반응형