윗줄에 결재란이 떡하니? 지저분한 엑셀 양식 파이썬으로 무시하고 읽어오기


파이썬 엑셀 자동화를 공부할 때 책이나 강의에서 제공하는 예제 파일들은 보통 1행부터 '이름, 부서, 직급' 같은 제목(Header)이 예쁘게 적혀있습니다. 하지만 우리 회사의 현실은 어떤가요? 파일 맨 위에는 거대한 글씨로 '월간 영업 실적 보고서'라는 제목이 병합되어 있고, 오른쪽 위에는 팀장, 국장, 사장님의 도장을 받는 '결재란'이 떡하니 자리 잡고 있습니다. 진짜 데이터는 한 4행이나 5행부터 시작하죠.

이런 엑셀 파일을 파이썬에서 pd.read_excel()로 그냥 불러오면 대참사가 일어납니다. 파이썬은 무조건 1행을 표의 제목으로 인식하기 때문에, 거대한 '보고서 제목'을 표의 기준으로 삼아버리고 나머지 진짜 제목들은 전부 'Unnamed'라는 정체불명의 데이터로 뭉개버립니다. 오늘은 엑셀 원본 양식을 손상하지 않고, 내가 원하는 진짜 데이터부터 쏙 빼오는 실전 불러오기 기술을 알아보겠습니다.


1. 불필요한 윗줄 건너뛰기: skiprows 옵션

엑셀 원본 파일에 있는 결재란과 제목을 일일이 마우스로 우클릭해서 '행 삭제'를 하고 계신가요? 수십 개의 파일을 그렇게 지우는 것은 자동화가 아닙니다. 파이썬에게 "위에 있는 쓸데없는 3줄은 눈 감고 무시해 줘!"라고 명령하면 끝납니다.

이때 사용하는 것이 바로 skiprows (행 건너뛰기) 옵션입니다.
데이터를 불러오는 코드 괄호 안에 이 마법의 단어만 추가해 주시면 됩니다.

df = pd.read_excel('실적보고서.xlsx', skiprows=3)

이렇게 적어주면 파이썬은 엑셀 파일의 맨 위에서부터 3줄(1~3행)을 아예 없는 셈 치고 건너뜁니다. 그리고 4행에 있는 '사번, 이름, 부서명'을 정확하게 표의 제목으로 인식하여 데이터를 깔끔하게 불러옵니다. 위쪽 양식이 아무리 복잡하게 병합되어 있어도 이 코드 한 줄이면 완벽하게 회피할 수 있습니다.


2. 특정 행만 콕 집어서 무시하기

만약 1행은 필요 없는데, 2행은 살려야 하고, 3행은 또 필요 없는 아주 기괴한 양식이라면 어떻게 할까요? skiprows는 단순히 위에서부터 몇 줄을 지우는 것뿐만 아니라, 특정 번호의 행만 콕 집어서 지울 수도 있습니다.

df = pd.read_excel('실적보고서.xlsx', skiprows=[0, 2])

파이썬은 숫자를 0부터 세기 때문에, 위 코드는 "엑셀의 첫 번째 줄(0)과 세 번째 줄(2)만 무시하고 가져와"라는 뜻이 됩니다. 양식이 아무리 지저분해도 이 대괄호 [] 안에 불필요한 줄 번호만 적어주면 원하는 알맹이만 골라낼 수 있습니다.


3. 중간에 뻥 뚫린 빈 줄 완벽하게 제거하기: dropna(how='all')

윗줄을 잘 건너뛰고 데이터를 불렀는데, 엑셀 파일을 작성한 사람이 가독성을 높이겠다고 중간중간 빈 줄을 통째로 삽입해 둔 경우가 있습니다. 7편에서 우리는 결측치를 지우는 dropna()를 배웠습니다. 하지만 그냥 dropna()를 쓰면 중요한 데이터 중 한 칸만 비어있어도 그 줄이 다 날아갈 위험이 있습니다.

오직 '줄 전체가 완전히 텅 빈 경우'에만 삭제하고 싶다면, 조건 옵션을 하나 달아줍니다.

df.dropna(how='all', inplace=True)

여기서 how='all'은 "이 줄의 모든 칸(all)이 빈칸(NaN)일 때만 지워라"라는 뜻입니다. 이 코드를 거치면 중간중간 이빨이 빠진 것처럼 비어있던 데이터들이 위로 착착 달라붙으며, 분석하기 가장 완벽한 꽉 찬 표(Data Frame)로 재탄생하게 됩니다.


원본 파일은 절대 건드리지 마세요

직장인들이 파이썬을 쓰면서 가장 버려야 할 습관이 바로 '파이썬으로 부르기 전에 엑셀을 열어서 예쁘게 손질하는 것'입니다. 결재란이 있든 빈 줄이 있든 엑셀 파일은 받은 상태 그대로 두십시오. 모든 정제 작업은 오늘 배운 skiprowsdropna를 통해 파이썬 코드 안에서 끝내야 진정한 업무 자동화가 완성됩니다.


▶ 핵심 요약

  • 실무 엑셀 상단의 보고서 제목이나 결재란 때문에 데이터가 깨질 때는 pd.read_excel(skiprows=줄수)를 사용하여 윗부분을 깔끔하게 무시하고 불러올 수 있습니다.
  • 건너뛸 행이 연속적이지 않다면 skiprows=[0, 2] 처럼 대괄호를 이용해 특정 행 번호만 지정하여 건너뛸 수 있습니다.
  • 엑셀 중간에 있는 완전히 텅 빈 줄을 안전하게 제거하려면 dropna(how='all') 옵션을 사용하여 데이터 유실 없이 공백만 제거합니다.

▶ 다음 편 예고

데이터를 완벽하게 불러왔다면, 이제 이 데이터를 요리해 멋진 요약 보고서를 만들 차례입니다. 다음 13편에서는 엑셀의 꽃이라 불리는 '피벗 테이블(Pivot Table)을 파이썬으로 1초 만에 구현하는 방법'을 통해 다차원 데이터 분석의 기초를 다져보겠습니다.


회사에서 받은 엑셀 파일 중, 양식이 너무 지저분해서 표를 정리하는 데만 하루 종일 걸렸던 '최악의 엑셀 양식'은 어떤 모습이었나요? 댓글로 울분 섞인 경험담을 들려주세요!

댓글

이 블로그의 인기 게시물

엑셀 셀 병합 데이터, 파이썬으로 불러올 때 엉망으로 깨지는 현상 완벽 해결법

날짜와 시간 데이터 포맷이 제각각일 때 파이썬으로 일괄 통일하는 비법

"파일을 찾을 수 없습니다" - 경로 오류(Path error)가 발생하는 이유와 대처법