필터 걸린 엑셀 python에서 사용하는 방법

반응형

From Pixabay Tumisu's Image

안녕하세요!

이번엔 엑셀을 필터가 걸린 상태로 코드로 다루는 방법을 알아보겠습니다.

 

엑셀 작업을 하다 보면, 필터를 걸어 데이터를 정제하게 됩니다. 그리고, 그렇게 필터가 걸린 상태로 엑셀을 파이썬으로 읽고 싶은 경우가 있습니다. 예를 들어, 엑셀에서 데이터를 정제한 다량의 엑셀이 있고, 필터가 걸려있는 상태가 정제된 상태인 경우, 이런 다량의 엑셀을 취합하여 코드 작업을 해야 하는 경우유용합니다.

 

* 코드만 필요하신 분을 위한, 필터 걸린 엑셀을 읽고 필터가 걸린 상태로 tsv로 쓰는 코드입니다.

입력: xlsx_name.xlsx

출력: output_name.tsv (필터 걸린 상태의 데이터만 tsv로 출력)

from openpyxl import load_workbook

xlsx_name = "입력 받는 엑셀.xlsx"
sheet_name = "입력 받는 엑셀의 Sheet"
output_name = "출력 파일 이름.tsv"

wb = load_workbook(xlsx_name)
ws = wb[sheet_name]

with open(output_name,'w') as fo:
    for row in ws: 
      if ws.row_dimensions[row[0].row].hidden == False:
          for cell in row:
              fo.write(f"{cell.value}\t")
          fo.write("\n")

 

* 필터 걸린 엑셀을 읽고, pandas의 DataFrame으로 바꾸는 코드입니다.

입력: xlsx_name.xlsx

출력: df(변수)

from openpyxl import load_workbook
import pandas as pd

xlsx_name = "titanic.xlsx"
sheet_name = "Sheet1"

wb = load_workbook(xlsx_name)
ws = wb[sheet_name]

for row in ws: 
    if ws.row_dimensions[row[0].row].hidden == False:
        if row[0].row == 1:
            header = [i.value for i in row]
            df = pd.DataFrame(columns=header)
        else:
            df.loc[len(df)] = [i.value for i in row]

 

핵심 부분 설명

위 두 코드에서 핵심부분은 아래의 코드입니다. 

for row in ws:
    if ws.row_dimensions[row[0].row].hidden == False:
        '''do Something'''

 

위 코드를 3부분으로 나누어 설명하겠습니다.

1. for row in ws:

 ws는 openpyxl라이브러리의 load_workbook함수를 이용해 읽은 엑셀의 Sheet 하나를 저장한 변수입니다. for문으로 순환하게 되면 각 행(row)을 반복하게 됩니다.


2. if ws.row_dimensions[row[0].row].hidden == False:

row[0].row는 해당 행의 첫 번째 셀의 행 번호를 의미합니다. 즉, 행의 번호를 의미한다고 보면 됩니다.

행 번호에 대해, ws.row_dimensions의 hidden 객체는 해당 행이 필터에 의해 가려진 행인지, 보이는 행인지를 의미합니다. hidden이 False라면, 가려지지 않았다는 의미이고, 이는 필터 아웃되지 않았다는 의미입니다.

 

3. '''do Something'''

이 부분은 해당 행을 DataFrame의 row로 추가할 수도있고, tsv로 쓸 수도 있습니다. 요지는 hidden이 False인 행을 저장하는 기능을 하는 부분입니다.

 

마치며

이번 시간에는 필터가 걸려있는 엑셀을 python으로 읽고, tsv로 내보내거나, pandas의 DataFrame으로 저장하는 방법에 대해 알아보았습니다. 다음에 더 도움되는 글로 찾아오겠습니다.

감사합니다.

 

 

반응형

댓글

Designed by JB FACTORY