파이썬 ODS 파일 열기/저장 및 오류 해결 방법 2가지(feat. pandas)

파이썬 ODS 파일(OpenDocument Spreadsheet)은 엑셀 파일처럼 스프레드시트 데이터를 저장할 수 있는 파일 포맷 중 하나입니다. LibreOffice와 같은 오픈소스 오피스 프로그램에서 많이 사용되며, 엑셀보다 가볍고 개방형 표준을 따르는 장점이 있습니다. 파이썬에서는 pandas 라이브러리를 사용해 엑셀 파일 뿐 아니라 ODS 파일을 쉽게 읽을 수 있습니다. 이 포스팅에서는 파이썬으로 ODS 파일을 읽고, 저장하는 방법을 설명하고, ods 파일 조작과 관련해서 발생할 수 있는 주의사항, 그리고 오류 발생시 해결방법까지 모두 살펴보도록 하겠습니다.

pandas 라이브러리 소개

pandas는 파이썬에서 데이터 분석 및 조작을 위해 가장 많이 사용되는 라이브러리입니다. pandas는 다양한 파일 형식을 읽고 쓰는 기능을 제공하며, 데이터프레임(DataFrame)을 사용해 데이터를 다루기 쉽게 도와줍니다. 엑셀(.xlsx) 파일뿐만 아니라 CSV, JSON, SQL 등 여러 형식의 파일을 지원하며, ODS 파일도 이 중 하나입니다.

파이썬 ODS 파일을 읽기 위한 준비

파이썬에서 ODS 파일을 읽으려면 pandas와 함께 odfpy라는 라이브러리를 추가로 설치해야 합니다. ODS 파일은 표준 XML 포맷으로 저장되며, 이를 파싱할 수 있는 odfpy 라이브러리가 필요합니다.

라이브러리 설치

pip이나 conda를 통해서 pandas를 설치합니다. 그리고 pip install을 이용해서 odfpy를 설치합니다.

# pandas 설치
conda install pandas
# or
pip install pandas

# odfpy 설치
pip install odfpy
ShellScript

위 명령어를 실행하면 pandasodfpy가 설치됩니다. 설치가 완료되면 ODS 파일을 다룰 준비가 끝납니다.

ODS 파일 읽기

pandasread_excel 함수를 사용하면 엑셀 파일뿐만 아니라 ODS 파일도 읽을 수 있습니다. 이때 engine 파라미터를 사용해 ODS 파일을 읽을 때 사용할 엔진을 지정해야 합니다. ODS 파일을 읽을 때는 odf 엔진을 사용합니다.

import pandas as pd

df = pd.read_excel('test.ods', engine="odf")
print(df)
Python

파라미터 설명

  • 파일경로.ods: 읽고자 하는 ODS 파일의 경로입니다. 상대 경로나 절대 경로를 사용할 수 있습니다.
  • engine='odf': ODS 파일을 읽기 위해 odf 엔진을 사용하도록 지정할 수 있습니다. 하지만, 지정하지 않아도 알아서 ods 파일을 읽어오므로 굳이 사용하지 않아도 됩니다.

위 코드에서 pd.read_excel 함수를 통해 ODS 파일을 불러오고, 이를 df라는 데이터프레임 변수에 저장합니다. 그런 다음, print(df)로 데이터프레임의 내용을 출력할 수 있습니다. 저는 아래와 같은 test.ods 파일을 불러오도록 해 보겠습니다.

그림 1. LibreOffice Calc로 작성한 스프레드시트 파일 test.ods 내용
그림 1. LibreOffice Calc로 작성한 스프레드시트 파일 test.ods 내용

위와 같은 스프레드시트 정보는 아래와 같이 pandas의 DataFrame으로 읽어옵니다.

그림 2. 파이썬 ods 파일 읽기를 통해서 가져온 DataFrame 출력
그림 2. 파이썬 ods 파일 읽기를 통해서 가져온 DataFrame 출력

특정 시트(sheet)만 읽기

ODS 파일에는 여러 개의 시트가 있을 수 있습니다. 기본적으로 첫 번째 시트를 읽지만, 특정 시트를 지정하고 싶다면 sheet_name 파라미터를 사용할 수 있습니다. 아래의 예시는 두 번째 시트 이름이 “확장데이터”인 경우입니다.

그림 3. 시트가 2개인 ods 파일의 두 번째 시트 내용
그림 3. 시트가 2개인 ods 파일의 두 번째 시트 내용

읽어올 시트를 지정하는 방법으로는 시트 이름을 사용하거나 시트 번호를 사용할 수 있습니다. 시트 번호를 사용하는 경우 첫 번째 시트는 0, 두 번째 시트는 1과 같이 숫자로 지정할 수 있습니다. 첫째 시트가 0부터 시작한다는 점 놓치지 마시기 바랍니다.

df = pd.read_excel('test.ods', sheet_name='확장데이터')
# or
df = pd.read_excel('test.ods', sheet_name=1)
Python

위와 같은 코드를 실행하면 아래와 같이 두 번째 시트 “확장데이터”의 내용을 읽어오는 것을 확인할 수 있습니다.

그림 4. 파이썬 ods 파일 읽기를 통해 두 번째 시트 내용 출력
그림 4. 파이썬 ods 파일 읽기를 통해 두 번째 시트 내용 출력

여러 시트 읽기

한 번에 여러 시트를 읽고 싶다면 sheet_name 파라미터에 리스트 형식으로 시트 이름이나 번호를 넣어줍니다. 이 경우 각 시트가 데이터프레임으로 반환되며, 시트 이름 또는 번호가 키(key)로 사용된 딕셔너리 형태로 결과가 반환됩니다.

sheets = pd.read_excel('test.ods', sheet_name=['기본데이터', 1])
print(sheets['기본데이터'])
print(sheets[1])
Python

아래와 같이 두 가지 시트를 모두 읽어온 것을 확인할 수 있습니다.

그림 5. pandas의 read_excel()을 사용해서 여러 시트 동시에 읽기
그림 5. pandas의 read_excel()을 사용해서 여러 시트 동시에 읽기

ODS 파일로 다시 저장하기

pandas에서 DataFrame을 ods 파일로 저장하기 위해서는 DataFrame.to_excel() 메서드를 사용하면 됩니다. 단, to_excel() 메서드에 engine=”odf” 파라미터를 사용하지 않으면 xlsx 형식으로 저장되므로 이점 유의하시기 바랍니다.

df.to_excel('저장경로.xlsx', engine="odf")
Python

ODS 파일 사용 시 주의사항

  • 파일 저장 문제: ods 파일로 저장하기 위해서는 to_excel() 메서드에 engine을 odf로 명시해 줘야 ods 형식으로 저장됩니다.
  • 데이터 형식 문제: ODS 파일에서 읽어온 데이터는 기본적으로 문자열로 처리될 수 있습니다. 숫자나 날짜 등의 형식이 제대로 적용되지 않는다면 pandasastype 함수를 사용해 데이터 형식을 변경해 주는 것이 좋습니다.
df['age'] = df['age'].astype(int)
Python

오류 해결 방법

odfpy 패키지 설치가 필요한 경우

만약 odfpy를 설치하지 않은채로 ods 파일을 읽으려고 하면 아래와 같은 오류 메시지”ImportError: Missing optional dependency ‘odfpy’. Use pip or conda to install odfpy.”로 odfpy 패키지를 설치해야 한다고 친절하게 알려줍니다.

그림 6. odfpy가 없을 때 pandas.read_excel()을 실행하면 발생하는 오류 메시지
그림 6. odfpy가 없을 때 pandas.read_excel()을 실행하면 발생하는 오류 메시지

numpy와 pandas 패키지 버전 이슈

pandas와 numpy 버전이 맞지 않는 경우에는 아래와 같은 오류가 발생하기도 합니다.

TypeError: Cannot convert numpy.ndarray to numpy.ndarray
Plaintext

위와 같은 오류가 발생하는 경우에는 numpy와 pandas 패키지를 삭제하고 다시 설치해 보시기를 바라며, numpy 버전이나 pandas 버전을 지정해서 설치해 보시기 바랍니다. 아나콘다를 사용하는 경우에는 아래와 같이 pandas와 numpy를 제거한 후 conda를 이용해서 pandas와 numpy를 설치해 보시기 바랍니다. 저는 conda install을 통해서 이 문제를 해결했습니다.

pip uninstall pandas numpy
conda install pandas numpy
ShellScript

정리

파이썬에서 ODS 파일 열기/저장을 실습해보고, 관련된 내용을 살펴보았습니다. pandas 라이브러리와 odfpy 패키지를 활용해 ODS 파일을 불러오고, 이를 데이터프레임으로 처리하는 방법을 배웠습니다. 또한 여러 시트를 읽는 방법과 데이터를 조작하는 방법에 대해서도 살펴보았습니다. ODS 파일은 엑셀 파일과 비슷한 포맷으로, 파이썬을 통해 쉽게 처리할 수 있으며, 이를 통해 다양한 데이터 분석 및 처리 작업을 수행할 수 있습니다.

관련 자료

함께 읽으면 좋은 글

Leave a Comment