Pandas With Excel
강의 홍보
- 취준생을 위한 강의를 제작하였습니다.
- 본 블로그를 통해서 강의를 수강하신 분은 게시글 제목과 링크를 수강하여 인프런 메시지를 통해 보내주시기를 바랍니다.
스타벅스 아이스 아메리카노를 선물
로 보내드리겠습니다.
- [비전공자 대환영] 제로베이스도 쉽게 입문하는 파이썬 데이터 분석 - 캐글입문기
I. Overview
이번 포스트는 기존의 엑셀 사용자를 위해 준비했다. 엑셀에 익숙한 사람들에게 파이썬을 분석 용도로 사용하고자 하는 분들에게는 작은 도움이 되기를 바란다.
II. 데이터 입출력
판다스는 다양한 형태의 외부 파일을 읽을 수 있다. CSV
, MS Excel
, SQL
, HDF5 Format
과 같은 파일 포맷을 읽을 수 있다. 파일 포맷(File Format)
에 따른 데이터 입출력 도구에 관한 자료를 요약하면 다음과 같다.
파일 포맷 | How to Read? | How to Write? |
---|---|---|
CSV | read_csv | to_csv |
MS Excel | read_excel | to_excel |
SQL | read_sql | to_sql |
그 외에 HTML
, JSON
, SAS
포맷과 같은 파일을 읽어오는 다양한 방법에 대해서는 Pandas 공식문서(PDF 다운로드)를 참조하기를 바란다.
III. Excel 파일
판다스 공식문서(version 1.0.3, Release date: March 18, 2020)에 따르면, read_excel()
함수는 Excel 2003(.xls), Excel 2007+(.xlsx) 파일을 읽어올 수 있다. 또한, Binary Excel(.xlsb) (한번도 본적은 없다!)도 읽을 수 있다고 하니, 90년대 엑셀 파일이 아니면, 모두 읽기가 가능한 듯 하다 (p. 286 참조).
(1) 파일 읽어오기
read_excel()
및 to_excel()
함수는 파이썬의 xlrd
, openpyxl
, pyxlsb
과 같은 모듈이 선행적으로 설치가 되어야 사용할 수 있기 때문에 만약, 함수 실행시 에러(error)가 발생하면 참조하기를 바란다.
- 함수 사용 예제
data = pandas.read_excel('파일 경로(이름)')
위와 같은 형태로 소스코드를 작성하면 된다.
import pandas as pd
url = 'https://github.com/chloevan/datasets/raw/master/sports/games_plays.xlsx'
games = pd.read_excel(url)
print(games.head())
Unnamed: 0 GameId HomeTeamAbbr VisitorTeamAbbr Week \
0 0 2017090700 NE KC 1
1 1 2017090700 NE KC 1
2 2 2017090700 NE KC 1
3 3 2017090700 NE KC 1
4 4 2017090700 NE KC 1
Stadium Location StadiumType Turf GameWeather \
0 Gillette Stadium Foxborough, MA Outdoor Field Turf Clear and warm
1 Gillette Stadium Foxborough, MA Outdoor Field Turf Clear and warm
2 Gillette Stadium Foxborough, MA Outdoor Field Turf Clear and warm
3 Gillette Stadium Foxborough, MA Outdoor Field Turf Clear and warm
4 Gillette Stadium Foxborough, MA Outdoor Field Turf Clear and warm
Temperature Humidity PlayId YardLine Quarter GameClock \
0 63.0 77.0 20170907000118 35 1 14:14:00
1 63.0 77.0 20170907000139 43 1 13:52:00
2 63.0 77.0 20170907000189 35 1 13:02:00
3 63.0 77.0 20170907000345 2 1 12:12:00
4 63.0 77.0 20170907000395 25 1 12:08:00
PossessionTeam Down Distance FieldPosition
0 NE 3 2 NE
1 NE 1 10 NE
2 NE 1 10 KC
3 NE 2 2 KC
4 KC 1 10 KC
위 코드로 데이터가 정상적으로 업로드 된 것을 확인 할 수 있다. 기존 엑셀 파일에 있는 Column명을 그대로 사용하고자 한다면, read_excel(파일명, header = 0)
사용하거나, read_excel(header, header = None)
을 사용하면 Column명 대신에 숫자로 순차적으로 표시되게 된다. 그리고, Column명은 첫번째 행에 입력되게 된다.
url = 'https://github.com/chloevan/datasets/raw/master/sports/games_plays.xlsx'
games2 = pd.read_excel(url, header = None)
print(games2.head())
0 1 2 3 4 5 \
0 NaN GameId HomeTeamAbbr VisitorTeamAbbr Week Stadium
1 0.0 2017090700 NE KC 1 Gillette Stadium
2 1.0 2017090700 NE KC 1 Gillette Stadium
3 2.0 2017090700 NE KC 1 Gillette Stadium
4 3.0 2017090700 NE KC 1 Gillette Stadium
6 7 8 9 10 \
0 Location StadiumType Turf GameWeather Temperature
1 Foxborough, MA Outdoor Field Turf Clear and warm 63
2 Foxborough, MA Outdoor Field Turf Clear and warm 63
3 Foxborough, MA Outdoor Field Turf Clear and warm 63
4 Foxborough, MA Outdoor Field Turf Clear and warm 63
11 12 13 14 15 16 \
0 Humidity PlayId YardLine Quarter GameClock PossessionTeam
1 77 20170907000118 35 1 14:14:00 NE
2 77 20170907000139 43 1 13:52:00 NE
3 77 20170907000189 35 1 13:02:00 NE
4 77 20170907000345 2 1 12:12:00 NE
17 18 19
0 Down Distance FieldPosition
1 3 2 NE
2 1 10 NE
3 1 10 KC
4 2 2 KC
(2) 파일 저장하기
불러온 파일을 저장하는 방법은 여러가지 있다. 여기서는 고민해야 한다. Excel 파일로 재 저장 할 것인지, CSV 파일로 저장할 것인지, JSON 파일로 저장할 것인지에 따라 지정하면 된다.
- 함수 사용 예제
data.to_excel('파일경로')
이렇게 작성하면 된다. 간혹 ModuleNotFoundError: No module named 'openpyxl'
과 같은 에러 메시지가 뜨면, 이는 to_excel()
실행시 필요한 openpyxl
모듈이 사전에 설치가 되지 않은 것이기 때문에 터미널에서 추가 설치를 진행하면 된다.
모듈 설치 방법은 아래와 같은 형태로 실행한다.
$ pip3 install openpyxl
아나콘다 배포판에는 openpyxl 라이브러리가 기본 제공되므로 설치하지 않아도 되지만, 혹시나 에러가 발생하면 conda install openpyxl
명령어를 실행한다.
games.to_excel('example.xlsx')
%%bash
ls
example.xlsx
이제 중요한 작업이 남았다. 실무에서는 보통 여러 형태의 엑셀이 중복적으로 존재하게 된다. 매월00보고서가 엑셀 형태로 남아 있는 경우가 많은데, 복수의 엑셀파일이 존재할 시, 어떻게 효과적으로 엑셀 데이터를 불러올지 고민할 수 밖에 없다. 다음 장에서 다루도록 하겠다.
IV. Reference
Wes McKinney and Pandas Development Team¶. Pandas: Powerful Python data analysis toolkit Release 1.0.3. Retrieved March 18, 2020, from https://pandas.pydata.org/docs/pandas.pdf