앎을 경계하기

[가짜연구소3기] Data Engineer

[가짜연구소 3기] 데이터 엔지니어링 29 - Getting data from multiple worksheets

양갱맨 2021. 9. 4. 21:12

주제

다수의 스프레드 시트를 선택해 데이터프레임으로 만들고, 합치는 과정에 대해 배웠다.


다수의 시트 선택하기

  • read_excel()은 보통 엑셀파일의 첫 시트만 가져온다.
  • sheet_name 인수(인덱스 또는 시트 이름)를 설정해서 특정 시트를 가져올 수 있다.
    • 여러 개의 시트를 설정하면 여러 시트를 가져올 수 있다.
  • read_excel()에 설정한 파라미터들이 가져오는 시트들에 모두 적용된다.

위처럼 두 개의 시트가 있다.

2017 시트를 가지고 오려면 다음과 같이 수행하면 된다.

#숫자 인덱스로 표시하는 경우 0부터 시작
survey_data_sheet2 = pd.read_excel('fcc_survey.xlsx', sheet_name=1)
survey_data_2017 = pd.read_excel('fcc_survey.xlsx', sheet_name='2017')

#같은 결과인지 확인
print(survey_data_sheet2.equals(survey_data_2017))

모든 시트 가져오기

sheet_name=None 으로 설정하면 모든 시트를 가져올 수 있다.

여러 개의 시트를 읽으면 바로 데이터프레임이 아닌 OrderedDict 타입으로 반환받을 수 있다.

각 시트 이름과 데이터프레임이 key와 value로 쌍을 이뤄서 저장되어있다.

모든 데이터 합치기

위에서 얻은 2016, 2017 연도의 데이터프레임을 하나로 합치려고 한다.

all_responses = pd.DataFrame()

for sheet_name, frame in survey_responses.items():
    frame['Year'] = sheet_name
    all_responses = all_responses.append(frame)

print(all_responses.Year.unique())
  1. 두 데이터프레임을 합칠 빈 데이터프레임을 만든다.
  1. 위에서 얻은 OrderedDict 타입의 survey_responses를 루프로 돌면서 각 연도별 데이터프레임인 frame에 새로운 컬럼 Year를 추가한다.
  1. 빈 데이터프레임에 데이터프레임을 추가한다.
  1. 전부 들어갔는지 확인하기 위해 unique()를 사용해서 Year 컬럼의 고유값을 확인한다.