[Python] Pandas 데이터프레임 excel로 변환

박주찬·2024년 5월 12일

python

목록 보기
8/10

실행하기 위해 필요한 것

설치 명령어: pip install pandas
설치 명령어: pip install openpyxl
  • pandas:
    데이터 조작과 분석을 위한 Python 라이브러리입니다. 이 라이브러리가 to_excel() 메서드를 제공합니다.
  • openpyxl:
    pandas의 to_excel() 메서드가 .xlsx 형식의 파일을 작성할 때 필요한 라이브러리입니다. openpyxl은 Excel 2010 이상의 .xlsx 파일을 읽고 쓰는 데 사용됩니다.

pandas 라이브러리의 DataFrame 객체는 데이터를 Excel 파일로 저장할 수 있는 편리한 메서드인 to_excel()을 제공합니다.
이 메서드는 데이터프레임의 데이터를 Excel 형식으로 변환하여 파일로 저장하는 데 사용됩니다.

to_excel() 메서드의 기본 구조:

DataFrame.to_excel('./data/visitkorea.xlsx', excel_writer, sheet_name='Sheet1', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, startrow=0, startcol=0, engine=None, merge_cells=True, encoding=None, inf_rep='inf', verbose=True, freeze_panes=None)
.to_excel(): vk 데이터프레임을 Excel 파일로 저장하는 메서드입니다.

./data/visitkorea.xlsx: 파일이 저장될 경로와 파일 이름을 지정합니다.
여기서는 현재 디렉토리의 data 폴더 내에 visitkorea.xlsx라는 이름으로 파일을 저장하도록 지정하고 있습니다.

excel_writer: 저장할 Excel 파일의 경로 또는 pandas.ExcelWriter 객체입니다. 예를 들어, 파일 경로를 문자열로 직접 지정할 수 있습니다.

sheet_name: 데이터를 저장할 엑셀 시트의 이름입니다. 기본값은 'Sheet1'입니다.
na_rep: 결측값을 대체할 문자열입니다. 예를 들어, na_rep='N/A'로 설정하면 데이터프레임의 결측값이 'N/A'로 대체되어 Excel 파일에 저장됩니다.
float_format: 부동소수점 숫자의 포맷을 지정하는 문자열입니다. 예를 들어, float_format='%.2f'는 소수점 두 자리까지의 포맷으로 숫자를 저장합니다.

columns: 저장할 열을 지정하는 리스트입니다. 지정하지 않으면 데이터프레임의 모든 열이 저장됩니다.

header: 열 이름을 파일에 헤더로 저장할지 여부를 결정합니다. 기본값은 True로, 열 이름을 저장합니다.

index: 인덱스를 파일에 저장할지 여부를 결정합니다. 기본값은 True입니다.

index_label: 인덱스 열의 라벨을 지정할 수 있습니다. 인덱스를 파일에 저장할 때 사용됩니다.

startrow / startcol: 시작 행과 열의 위치를 지정합니다. 데이터를 특정 위치에 삽입하고 싶을 때 유용합니다.

engine: 사용할 엔진을 지정합니다. openpyxl이나 xlsxwriter 같은 엑셀 파일 쓰기 엔진을 선택할 수 있습니다

merge_cells: 셀 병합 여부를 결정합니다. 기본값은 True입니다.

freeze_panes: 지정된 셀을 기준으로 팬을 고정합니다. 예를 들어, freeze_panes=(1,0)은 첫 번째 행을 고정시킵니다.


예시)

import pandas as pd

# 데이터프레임 생성
df = pd.DataFrame({
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35],
    'Job': ['Engineer', 'Doctor', 'Artist']
})

# 엑셀 파일로 저장
df.to_excel('./data/employees.xlsx', index=False, header=True)

정리하면 ->
employees.xlsx 파일을 생성하고, Name, Age, Job 열이 포함된 데이터프레임의 데이터를 저장하고 있습니다. index=False로 설정하여 인덱스는 저장되지 않습니다.

to_excel() 메서드를 사용하면 데이터 분석 결과를 Excel 파일로 손쉽게 저장하고, 다른 사용자와 공유하거나 보고서를 작성할 때 편리하게 사용할 수 있습니다.


[추가] .read_excel()

pandas 라이브러리에서 제공하며, Excel 파일을 읽어서 DataFrame으로 변환하는 데 사용됩니다.

						Excel -> pandas (변환)

예시)

import pandas as pd

# Excel 파일을 DataFrame으로 읽기
vkxl = pd.read_excel('./data/visitkorea.xlsx', sheet_name='Sheet1', index_col='no')

# 결과 확인
print(vkxl.head())  # DataFrame의 처음 몇 행을 출력하여 내용 확인

pd.read_excel(): 이 함수는 pandas 라이브러리에서 제공하며, Excel 파일을 읽어서 DataFrame으로 변환하는 데 사용됩니다.

'./data/visitkorea.xlsx': 이는 read_excel() 함수에 전달된 첫 번째 인자로, 읽어들일 Excel 파일의 경로와 파일명을 지정합니다. 여기서는 현재 작업 디렉토리의 data 폴더 안에 있는 visitkorea.xlsx 파일을 의미합니다.

index_col='no': 이 인자는 DataFrame에서 인덱스로 사용할 열을 지정합니다. 여기서는 'no'라는 이름의 열을 DataFrame의 인덱스로 설정합니다. 이는 각 데이터 행이 고유하게 식별될 수 있도록 해주며, 나중에 데이터를 조회하거나 조작할 때 유용합니다.

주의 사항

  • 파일 경로가 정확해야 하며, 시트 이름과 인덱스로 사용할 열 이름도 Excel 파일의 실제 내용과 일치해야 합니다.
  • 파일이나 시트가 존재하지 않거나, 지정된 인덱스 열이 없는 경우 오류가 발생할 수 있습니다.


여기서 잠깐!!

데이터를 불러오다가 기존 excel 파일의 열이 3개만 저장되어있고 이를 pandas로 불러와 각 행을 구분하기 위한 인덱스로 index_col='no'를 부여했더니

ValueError: Length mismatch: Expected axis has 3 elements, new values have 4 elements

라는 에러가 나왔다...

검색해보니까
pandas에서 DataFrame 또는 Series의 열(또는 인덱스)의 길이와 새로 할당하려는 값의 길이가 일치하지 않을 때 발생합니다. 이는 데이터 구조의 크기와 새로운 레이블 또는 값의 배열 크기가 서로 다를 때 발생하는 일반적인 오류입니다.

상황 예시

  • DataFrame의 열 이름 변경 시: DataFrame에 3개의 열이 있는데, 4개의 새로운 열 이름을 할당하려고 시도할 때 이 오류가 발생합니다.
  • 인덱스 레이블 변경 시: 비슷하게, 인덱스에 대해 기대되는 레이블의 수와 할당하려는 레이블의 수가 다를 때 오류가 발생할 수 있습니다.

문제 해결 방법

  • 열 이름 변경 시: 열의 수와 새 열 이름의 수가 정확히 일치해야 합니다.
  • 인덱스 변경 시: 인덱스 레이블의 수와 새로운 레이블의 수가 일치해야 합니다.


    <잘못된 코드>
import pandas as pd

# 데이터프레임 생성
df = pd.DataFrame({
    'Name': ['Alice', 'Bob'],
    'Age': [25, 30],
    'Job': ['Engineer', 'Doctor']
})

# 열 이름 변경 시도
try:
    df.columns = ['Name', 'Age', 'Job', 'Location']  # 4개의 이름을 주려고 하지만, 열은 3개뿐입니다.
except ValueError as e:
    print(e)
# 올바르게 열 이름 변경
df.columns = ['Full Name', 'Age', 'Occupation']  # 각 열 이름이 적절하게 3개로 매칭






.read_excel() 다른 사용 예제

Excel 파일에서 데이터를 읽어 DataFrame으로 변환하는 간단한 예제

import pandas as pd

# Excel 파일을 DataFrame으로 읽기
df = pd.read_excel('example.xlsx')

# 특정 시트를 지정하여 데이터 불러오기
df_specific = pd.read_excel('example.xlsx', sheet_name='Sheet2')

# 특정 열만 불러오기
df_columns = pd.read_excel('example.xlsx', usecols=['A', 'C'])

# 특정 행을 건너뛰고 데이터 불러오기
df_skip = pd.read_excel('example.xlsx', skiprows=range(1, 4))

# 파일의 첫 10행만 불러오기
df_nrows = pd.read_excel('example.xlsx', nrows=10)

# 인덱스 열 지정하기
df_index = pd.read_excel('example.xlsx', index_col='ID')

주의 사항

  • 파일 경로와 시트 이름이 정확해야 합니다. 잘못된 경로나 시트 이름을 지정하면 오류가 발생합니다.
  • Excel 파일의 크기가 매우 크면 메모리 문제가 발생할 수 있으므로, usecols, skiprows, nrows 등의 매개변수를 적절히 활용하여 필요한 데이터만 불러오는 것이 좋습니다.

정리하면 ->
pd.read_excel() 함수도 마찬가지로 데이터 분석에서 Excel 데이터를 쉽게 활용할 수 있도록 해주는 매우 유용한 도구입니다. 이를 통해 데이터를 빠르게 불러오고, 필요한 데이터 조작 및 분석을 수행할 수 있습니다.

profile
Diamond

0개의 댓글