본문으로 건너뛰기
김신건의 로그

[Pandas] read_excel / to_excel

· 수정 · 📖 약 1분 · 356자/단어 #python #pandas #io #excel
Pandas read_excel, Pandas to_excel, Excel pandas, 엑셀 pandas

정의

pandas.read_excel 는 Excel 파일 (.xlsx, .xls) 을 Pandas DataFrame 으로 읽는 함수. 한국 실무에서 매우 자주 쓰인다.

의존 라이브러리

형식필요한 패키지
.xlsxopenpyxl
.xls (구형)xlrd (≤ 1.2.0)
.xlsbpyxlsb
.odsodfpy
pip install openpyxl

기본 사용

df = pd.read_excel('data.xlsx')                       # 첫 시트
df = pd.read_excel('data.xlsx', sheet_name='Sheet2')
df = pd.read_excel('data.xlsx', sheet_name=0)         # 0번째 시트

핵심 옵션

옵션의미
sheet_name시트 이름/번호, None = 모든 시트 (dict 반환)
header헤더 행 위치
skiprows건너뛸 행
usecols’A:C’ 또는 컬럼명 리스트
dtype컬럼별 타입
parse_dates날짜 파싱
na_valuesNA 변환 값
engine’openpyxl’, ‘xlrd’, ‘pyxlsb’

여러 시트 한 번에

python
# 모든 시트를 dict[name → DataFrame] 으로
sheets = pd.read_excel('multi.xlsx', sheet_name=None)
print(list(sheets.keys()))    # ['Sales', 'Returns', 'Inventory']
print(sheets['Sales'].shape)
결과
['Sales', 'Returns', 'Inventory']
(1234, 8)

일부 영역만

# A1:D100 영역만
df = pd.read_excel('data.xlsx',
    usecols='A:D',
    nrows=100,
    skiprows=5,
)

저장 (to_excel)

df.to_excel('out.xlsx', index=False, sheet_name='데이터')

# 여러 시트
with pd.ExcelWriter('out.xlsx') as writer:
    df1.to_excel(writer, sheet_name='Sales', index=False)
    df2.to_excel(writer, sheet_name='Returns', index=False)

서식 / 스타일

xlsxwriter 또는 openpyxl 의 직접 API 사용. 단순 데이터 저장은 to_excel, 차트나 서식이 필요하면 xlsxwriter 의 raw API 를 결합.

with pd.ExcelWriter('styled.xlsx', engine='xlsxwriter') as writer:
    df.to_excel(writer, sheet_name='Report', index=False)
    workbook = writer.book
    worksheet = writer.sheets['Report']
    money_fmt = workbook.add_format({'num_format': '#,##0'})
    worksheet.set_column('B:B', 12, money_fmt)

함정

1. Excel 의 자동 타입 추론

  • 숫자처럼 보이는 문자 ('0001') 가 정수로 변환됨
  • 날짜처럼 보이는 문자가 datetime 으로 변환됨
  • 해법: dtype={'col': 'str'}

2. 큰 파일 성능

  • Excel 자체가 압축된 XML 이라 read_csv 보다 훨씬 느리다
  • 가능하면 CSV / Parquet 사용 권장
  • 정 Excel 이 필요하면 engine='calamine' (pandas 2.2+) 가 빠름

3. 병합된 셀

  • 병합된 셀은 첫 셀에만 값, 나머지는 NaN
  • 해법: df.ffill() 로 forward fill

4. 시트 이름의 한글

  • 일부 환경에서 한글 시트명이 깨질 수 있음, engine='openpyxl' 권장

참고

이 글의 용어 (3개)
[Pandas] DataFramepandas
정의 은 2차원 레이블 테이블. 각 열이 , 모든 열이 같은 (행 라벨) 를 공유. SQL 테이블 / Excel 시트 / R data.frame 의 Python 대응체. 생성 <…
[Pandas] read_csv / to_csvpandas
정의 는 CSV (Comma-Separated Values) 파일 또는 비슷한 텍스트 형식을 으로 읽는 함수. pandas 사용의 99% 가 여기서 시작. 대응 출력 함수는 . …
[Pandas] read_json / to_jsonpandas
정의 은 JSON 문자열 또는 파일을 으로 변환. orient 파라미터가 핵심, JSON 구조를 어떻게 해석할지 결정한다. orient 옵션 비교 | orient | 구조 | 적…

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기