본문 바로가기
코딩/데이터분석(Pandas, ML, etc)

판다스(Pandas)에서 시트가 여러 개인 엑셀 파일을 불러오는 방법

by 나홀로코더 2021. 12. 16.
반응형

목차

1. 주제 소개

2. 모든 시트 불러오기

3. 특정 시트 불러오기


 

1. 주제 소개

 

앞서 CSV 파일이나 엑셀 파일을 불러오는 방법에 대해 소개하는 글을 올렸었다.

 

판다스(Pandas)에서 엑셀, CSV 파일 불러오기 기초

판다스(Pandas)에서 엑셀, CSV 파일의 일부만 불러오기, 데이터타입과 포맷 지정하기

 

위에 소개한 내용 외에도 수많은 옵션들이 있지만, 활용 빈도가 잦고 기본적인 내용들은 거의 소개한 것 같다.

 

위에 소개한 내용들은 엑셀, CSV 파일에 공통적으로 적용되는 내용이었는데, 이번에는 마지막으로 엑셀 파일에만 해당되는 내용을 소개하려 한다.

 

엑셀 파일의 경우에는 한 개의 문서 안에 여러 개의 시트를 만들 수가 있는데, 분석하려는 데이터가 수십 개의 시트로 이루어진 경우도 있을 것이다.

 

예를 들면 건강보험공단에서는 "의료급여 통계연보" 자료를 엑셀 파일 형태로 제공하고 있는데, 파일을 열어 보면 아래와 같이 시트 하나에 통계표 하나씩, 수십 개의 시트가 있다.

 

통계연보 엑셀파일

 

이런 경우에 read_excel을 이용해서 파일을 불러와 보면, 아래와 같이 첫 번째 시트만 불러오게 된다.

 

 

이럴 때, 모든 시트를 불러오거나, 특정 시트만 불러오는 방법을 소개한다.

 

 

반응형

 

2.  모든 시트 불러오기

 

엑셀 시트에 관해서는 sheet_name 옵션을 지정해주면 된다.

 

위에서 본 것처럼 sheet_name을 아예 넣지 않게 되면 첫번째 시트를 기본값으로 불러오지만, 아래와 같이 None으로 지정하게 되면 모든 시트를 불러와준다.

 

import pandas as pd
data = pd.read_excel('2020_의료급여_주요통계표.xlsx', sheet_name=None)

 

위에서 불러온 data를 출력해보면 뭔가 복잡하게 출력이 되는데, 자세히 보면 각 시트의 이름이 key이고, 시트의 내용이 value인 딕셔너리인 것을 알 수 있다. '데이터프레임의 딕셔너리'인 것이다.

 

{'제Ⅰ편_':     Unnamed: 0 Unnamed: 1
 0          NaN        NaN
 1          NaN        NaN
 2          NaN        NaN
 3          NaN        NaN
 4          NaN        NaN
 5          NaN        NaN
 6          NaN        NaN
 7          NaN        NaN
 8          NaN       제Ⅰ편 
 9          NaN        NaN
 10         NaN  의료보장 일반현황,
 '제Ⅰ -제1표':                                                 제 1 표      Unnamed: 1  \
 0                                    연도별 의료보장 적용인구 현황             NaN   
 1                                                 NaN             NaN   
 2                                          구        분             NaN   
 3                                           의료보장 적용인구             NaN   
 4                                          의\n료\n급\n여               계   
 5                                                 NaN              1종   
 6                                                 NaN              2종

 

따라서 딕셔너리의 일반적인 사용법에 따라서, key(시트명)를 이용해 각 시트의 데이터를 볼 수 있다.

 

data['시트명']

 

또한 .keys() 함수를 이용해 모든 시트명을 불러올 수 있고, list 함수를 이용해 리스트로 바꿀 수도 있다. 이렇게 얻은 리스트는 for문을 이용한 반복 작업에 활용할 수 있을 것이다.

 

list(data.keys())

 

그 예를 들면 아래와 같다. 아래 코드는 통계연보 파일 중 10개 시트에 있는 지자체별 자료를 1개의 데이터프레임으로 합치는 코드의 일부이다. 자세한 내용은 별도의 포스팅으로 소개하려 한다.

 

sheets = list(data.keys())[20:29]

df = pd.DataFrame()
for i in range(len(sheets)):
    sheet = data[sheets[i]]
    ...

 

반응형

 

3. 특정 시트 불러오기

 

전체 시트가 아니라 특정 시트만 불러오고 싶다면, 시트의 번호(0부터 시작)를 이용하거나, 시트의 이름을 이용하는 두 가지 방법이 있다.

 

아래와 같이 불러오려는 시트의 번호를 리스트로 넘겨주면, 위에서 본 것처럼 '데이터프레임의 딕셔너리'로 불러와준다.

 

import pandas as pd
data = pd.read_excel('2020_의료급여_주요통계표.xlsx', sheet_name=[1, 2])

 

앞에서 key가 시트의 이름이었던 것과 달리 이렇게 불러오면 시트의 번호가 key가 된다.

 

따라서 각 시트의 호출도 시트의 번호로 해주면 된다.

 

 

시트의 이름을 이용해 불러와도 결과는 같다. 다만 이번에는 key가 시트의 이름이 된다는 점이 다르다.

 

참고로, 아래와 같이 시트의 번호와 시트의 이름을 섞어서 사용할 수도 있다.

 

[0, 1, "Sheet5"]

 

반응형

댓글