Python/Pandas

[Pandas] 파이썬 엑셀 파일 다루기 : read_excel, to_excel

jimmy_AI 2021. 12. 22. 11:58
반응형

파이썬 판다스 : 엑셀 파일로 데이터프레임 생성

안녕하세요. 이번 포스팅에서는 파이썬 엑셀 파일에서 csv 등 다른 파일로 변환 없이

바로 데이터프레임을 생성하여 다룰 수 있는 판다스의 read_excel 함수에 대해서 알아보고,

작업한 데이터프레임을 엑셀 파일로 다시 내보낼 수 있는 to_excel 함수도 다뤄보겠습니다.

 

엑셀 파일 가져오기 함수 : read_excel

먼저, 이번 예시에서는 다음과 같은 student.xlsx 파일이 있다고 가정해보겠습니다.

내부 양식이 더 복잡하거나 셀 내에 함수가 들어있어도 상관은 없으며, 시트가 여러개인 경우나

행, 열이 첫 셀부터 시작하지 않는 경우는 뒷 부분에서 다루어보도록 하겠습니다.

 

일단, 데이터프레임으로 가져오는 방법은 간단합니다.

pd.read_excel('엑셀 파일 디렉토리') 형태로 지정해주시면 가장 기본적인 형태는 완성됩니다.

여기서는 엑셀 파일과 작업하는 파이썬 파일이 같은 폴더에 있다고 가정해보겠습니다.

import pandas as pd

# read_excel 함수의 가장 간단한 사용 예시
df = pd.read_excel('student.xlsx')

데이터프레임이 잘 열렸는지 확인해보도록 하겠습니다.

(혹시, 파일을 여는 과정에서 에러가 난다면, engine = 'openpyxl'을 추가로 지정해보세요.)

비어있던 셀들에는 NaN값이 채워지면서, 데이터프레임이 잘 가져와진 것을 확인해보았습니다.

 

 

참고로, 오른쪽에 파란색 마법봉 기능을 지원하는 버전이 있는 듯 합니다.

(코랩에서 실행한 경우 위와 같이 나타났습니다.)

이 경우, 위와 같이 필터링 결과를 쉽게 확인할 수 있는 것을 보았습니다.

이제 loc, iloc 함수를 이용한 필터링 대신 엑셀 파일을 다루는 경우에는 위와 같은

필터링 방법을 사용해도 좋을 것으로 생각됩니다.

 

 

read_excel 함수 argument

1. sheet_name : 데이터프레임으로 가져올 시트 지정

엑셀 파일 내에서는 시트가 여러개일 수도 있습니다.

기본 값으로는 첫 시트를 가져오는 것으로 설정되어 있으며,

다른 시트를 가져오고 싶은 경우 시트 이름이나 순서 번호(0번 부터 시작 주의, 3번째인 경우 2)

를 인자로 지정해주시면 됩니다.

# 시트 이름 지정
df = pd.read_excel('student.xlsx', sheet_name = "Sheet1")

# 시트 번호 지정(첫 번째는 0, 두 번째는 1, ...)
df = pd.read_excel('student.xlsx', sheet_name = 0)

참고로, 여러 시트를 리스트로 지정하거나, None으로 지정하며 모든 시트를 가져올 수 있는데,

이 경우는 딕셔너리 형태로 시트이름 - 해당 시트에 매칭되는 데이터프레임 으로 가져오게됩니다.

 

2. index_col : 인덱스로 설정할 column 지정

위의 데이터프레임 예시를 보시면, 인덱스 자리(맨 왼쪽의 굵은 글씨)에는 0, 1, 2, 3, 4의

숫자가 새롭게 생성된 것을 확인하실 수 있습니다.

원래 있던 column으로 인덱스로 지정하고 싶은 경우,

index_col = "열 이름" 혹은 index_col = 열의 순서(0번 부터 시작)

형태로 지정해주시면 됩니다.

# 열의 이름으로 지정
df = pd.read_excel('student.xlsx', index_col = "학번")

# 열의 순서로 지정(2번째 column인 "이름"으로 지정)
df = pd.read_excel('student.xlsx', index_col = 1)

인덱스 열이 달라진 결과는 위의 결과를 참고하시면 이해가 쉬울 것으로 생각됩니다.

 

반응형

3. header : 시작 행 위치 지정

엑셀 파일이 시작하는 첫 위치가 1번 행이 아닌 경우, 지정해주시면 됩니다.

예를 들어, 아래와 같이 두 번째 행부터 엑셀 파일이 시작하는 경우를 보겠습니다.

이런 경우는 header = 1(0부터 시작하여 두번째 행은 1)로 지정해주시면 됩니다.

# 시작 행 위치 지정
df = pd.read_excel('student.xlsx', header = 1)

 

4. usecols : 가져올 열 수동 지정

때에따라서는 모든 열을 동시에 가져오고 싶지 않을 수도 있습니다.

이런 경우는 usecols = "A,B,E" 처럼 열의 알파벳을 기준으로 가져오시거나,

usecols = [0, 1, 4] 처럼 열의 순서를 기준으로 일부 열만 가져오시면 됩니다.

# 일부 열만 가져오기
df = pd.read_excel('student.xlsx', usecols = "A,B,E")

# 위와 같은 결과
df = pd.read_excel('student.xlsx', usecols = [0, 1, 4])

 

5. names : 열의 이름 리스트 지정

데이터를 불러오는 단계에서 열의 이름을 원하는 형태로 지정 가능합니다.

이 경우 이름의 리스트 원소 개수가 열의 이름 개수와 일치해야함에 유의해주세요.

# 열 이름 수동 지정
df = pd.read_excel('student.xlsx', names = ['num', 'name', 'major', 'second major', 'GPA'])

열의 이름들이 지정한대로 바뀐 것을 확인하실 수 있습니다.

 

6. 기타 유용한 인자

여기서는 다루지 않겠지만, read_excel 함수에서 지원하는 인자들 중 많이 쓰일만한 인자를

몇 가지 더 소개하도록 하겠습니다.

 

engine : 만일 열려는 엑셀 파일 양식이 .xls 처럼 구버전이거나 .odf 등 다른 양식이라면 지정

skiprows : 모든 행을 전부 가져오고 싶지 않을 경우, 원하는 위치까지 불러올 경우 지정

na_values : 결측값으로 취급할 데이터 값을 정하고 싶은 경우 지정

keep_default_na : False로 지정할 경우 결측치에 NaN이 안채워지고, 빈 칸으로 남아있음

dtype : 데이터 타입을 미리 지정해주고 싶은 column이 있다면 딕셔너리 형태로 지정

 

이 외에도 정말 많은 argument를 지원한다는 점에 참고해주시면 좋을 듯 합니다.

 

 

엑셀 파일 내보내기 함수 : to_excel

to_excel 함수의 사용법은 매우 간단합니다.

원하는 데이터프레임을 기준으로 to_excel 함수 내에 엑셀 파일의 이름과 디렉토리를

지정해주시면 완료됩니다.

# 내보낼 파일 이름과 디렉토리 지정
df.to_excel('student2.xlsx')

물론, 이 함수에서도 시트 이름 지정, 인덱스, 소수점 포맷팅 형태, 파일 형식 engine 등

많은 인자를 지원하지만, 여기서는 추가 설명을 생략하도록 하겠습니다.