안녕하세요 직장인 library 입니다.
Programming 관련해서 글을 처음 올리는데, 무엇부터 작성하는 게 좋을지 감이 잘 안 잡히네요.
우선, 가장 최근에 작업해봤던 ods file 읽은 후 data 비교를 소개해보려고 합니다.
이번 포스팅에서는 ods Spreadsheet 읽고 셀 데이터를 pandas dataframe으로 만들기 입니다.
1. 필요 module 설치
konsole에서 작업하는 경우 pip install을 이용해서 설치하시면 됩니다. 저는 PyCharm IDE를 사용 중이며,
setting > Project > Python Interpreter > Package install을 이용해서 설치하였습니다.
설치 필요 module
- Pandas : 데이터 조작 및 분석을 위한 파이썬 프로그래밍 언어 용으로 작성된 소프트웨어 라이브러리
- Ezodf : open spread sheet 입출력을 위한 라이브러리
- lxml : 내부 트리 구조를 가지고 있는 파일을 표현하기 위해 사용하는 파싱(Parser) 역할 라이브러리
2. Code 구성
제가 사용한 방식은 ods 특정 sheet를 바라보고 row 별로 읽어들이며,
cell 값을 row_data list에 추가, 그리고 리스트들을 다시 row_values list에 추가합니다.
이후 list 내 첫번때 라인을 column의 head로 설정하고 dataframe 형식으로 설정해줍니다.
import pandas as pd
import ezodf
import os
base_path = os.getcwd() + "\\"
def read_ods(filename, sheetname):
try:
sheet = ezodf.opendoc(filename=base_path + filename).sheets[sheetname]
except KeyError:
raise KeyError("Unable to open" + filename)
row_values = []
for row in sheet.rows():
row_data = []
for cell in row:
row_data.append(cell.value)
row_values.append(row_data)
df = pd.DataFrame(row_values[1:], columns=row_values[0])
print(df)
if __name__ == '__main__':
read_ods('Target.ods','sheet_in_file')
Code 구성에 따라 동작하게 된다면, 'Target.ods' 파일을 읽고 dataframe을 만들게 되는데,
아래는 예시로 만들어본 dataframe 결과물 입니다.
3. Code 설명
#module import
import pandas as pd
import ezodf
import os
#py 현재 경로 확인
base_path = os.getcwd() + "\\"
# read_ods function 선언
def read_ods(filename, sheetname):
try:
#'ezodf.opendoc' 사용하여 파일 open 시 절대 경로 입력, '.sheets' memberfunction으로 sheet 설정
sheet = ezodf.opendoc(filename=base_path + filename).sheets[sheetname]
except KeyError:
raise KeyError("Unable to open" + filename)
#row와 column 별로 순서대로 읽어들이면서 cell 값을 list에 추가하는 방식
#row_values list 선언
row_values = []
#'sheet.rows()'의 row 별로 loop 설정
for row in sheet.rows():
#row_data list 선언
row_data = []
#'row'의 cell별로 접근할 수 있게 loop 설정
for cell in row:
#각 'cell' data를 'row_data' list에 담기
row_data.append(cell.value)
#모든 'cell'값이 row_data에 담기면 'row_values'list에 담기
row_values.append(row_data)
#'row_values[1:]' 첫번쨰 요소를 제외한 나머지 모든 요소의 list, dataframe의 data로
#'columns=row_values[0]' 첫번째 값은 columns의 head로 사용하는 것으로 선언
df = pd.DataFrame(row_values[1:], columns=row_values[0])
#만들어진 dataframe 프린트하기
print(df)
if __name__ == '__main__':
#read_ods function에 인자 'Target.ods','파일내 dataframe만들 sheet name'
read_ods('Target.ods','sheet_in_file')
자세한 설명들은 곁들이지 않고 코드 사용 및 이해에 필요한 내용만 설명을 해보았습니다.
ods내 data 양이 많을 경우에 다른방식으로 읽어야 할 수도 있지만, 저 같은 경우는 위 코드로 파일을 읽을 때, debugging하기도 편해서, row별로, colum별로 data를 읽는 방식을 많이 사용합니다.
코드는 copy and paste!
By workerslibrarian.
'programming' 카테고리의 다른 글
[vim] 특정 패턴이 포함된 라인 제거 또는 포함되지 않은 라인 제거 (0) | 2023.05.16 |
---|---|
내 블로그 구글 검색에 노출시키기 (0) | 2023.05.06 |