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

파이썬 엑셀 자동화를 공부할 때 책이나 강의에서 제공하는 예제 파일들은 보통 1행부터 '이름, 부서, 직급' 같은 제목(Header)이 예쁘게 적혀있습니다. 하지만 우리 회사의 현실은 어떤가요? 파일 맨 위에는 거대한 글씨로 '월간 영업 실적 보고서'라는 제목이 병합되어 있고, 오른쪽 위에는 팀장, 국장, 사장님의 도장을 받는 '결재란'이 떡하니 자리 잡고 있습니다. 진짜 데이터는 한 4행이나 5행부터 시작하죠. 이런 엑셀 파일을 파이썬에서 pd.read_excel() 로 그냥 불러오면 대참사가 일어납니다. 파이썬은 무조건 1행을 표의 제목으로 인식하기 때문에, 거대한 '보고서 제목'을 표의 기준으로 삼아버리고 나머지 진짜 제목들은 전부 'Unnamed'라는 정체불명의 데이터로 뭉개버립니다. 오늘은 엑셀 원본 양식을 손상하지 않고, 내가 원하는 진짜 데이터부터 쏙 빼오는 실전 불러오기 기술을 알아보겠습니다. 1. 불필요한 윗줄 건너뛰기: skiprows 옵션 엑셀 원본 파일에 있는 결재란과 제목을 일일이 마우스로 우클릭해서 '행 삭제'를 하고 계신가요? 수십 개의 파일을 그렇게 지우는 것은 자동화가 아닙니다. 파이썬에게 "위에 있는 쓸데없는 3줄은 눈 감고 무시해 줘!"라고 명령하면 끝납니다. 이때 사용하는 것이 바로 skiprows (행 건너뛰기) 옵션입니다. 데이터를 불러오는 코드 괄호 안에 이 마법의 단어만 추가해 주시면 됩니다. df = pd.read_excel('실적보고서.xlsx', skiprows=3) 이렇게 적어주면 파이썬은 엑셀 파일의 맨 위에서부터 3줄(1~3행)을 아예 없는 셈 치고 건너뜁니다. 그리고 4행에 있는 '사번, 이름, 부서명'을 정확하게 표의 제목으로 인식하여 데이터를 깔끔하게 불러옵니다. 위쪽 양식이 아무리 복잡하게 병합되어 있어도 이 코드 한 줄이면 완벽하게 회피할 수 있...

가공 끝난 데이터, 파이썬으로 엑셀 시트(Sheet) 여러 개로 쪼개서 저장하기

파이썬으로 수만 줄의 데이터를 불러와 조건에 맞게 필터링하고 빈칸까지 깔끔하게 청소했습니다. 이제 이 완벽한 데이터를 엑셀로 저장해서 팀장님께 보고할 일만 남았습니다. 그런데 팀장님의 지시사항이 하나 더 떨어집니다. "이번 달 전체 실적 데이터, 부서별로 엑셀 탭(시트) 나눠서 하나의 파일로 정리해 주세요." 엑셀만 다룰 줄 알던 시절이라면 어떻게 했을까요? '영업팀'으로 필터링해서 복사하고, 아래쪽의 + 버튼을 눌러 새 시트를 만든 뒤 붙여넣고, 시트 이름을 '영업팀'으로 바꿉니다. 그리고 이 짓을 인사팀, 마케팅팀, 재무팀... 부서 개수만큼 무한 반복합니다. 부서가 20개라면 20번을 반복해야 하죠. 하지만 파이썬에서는 판다스의 숨겨진 무기 하나만 꺼내면 클릭 한 번에 20개의 시트가 알아서 척척 만들어집니다. 1. to_excel()의 치명적 한계 2편에서 우리는 데이터를 엑셀로 내보낼 때 df.to_excel('결과.xlsx') 라는 코드를 쓴다고 배웠습니다. 그렇다면 영업팀 데이터(df_sales)와 인사팀 데이터(df_hr)를 각각 저장하려면 이렇게 쓰면 될까요? df_sales.to_excel('결과.xlsx', sheet_name='영업팀') df_hr.to_excel('결과.xlsx', sheet_name='인사팀') 이 코드를 실행하고 엑셀 파일을 열어보면, 안타깝게도 '인사팀' 시트 딱 하나만 남아있을 것입니다. to_excel() 함수는 기본적으로 파일을 **'새로 덮어쓰기'**하기 때문입니다. 영업팀 시트를 기껏 만들어놨더니, 그 다음 줄에서 인사팀 데이터가 기존 파일을 싹 밀어버리고 혼자 자리를 차지한 것이죠. 2. 엑셀의 바인더 역할을 하는 마법사: pd.ExcelWriter 여러 개의 시트를 하나의 파일에 차곡차곡 모으려면, 파이썬에게 "이 엑셀 파일 아직 닫지 말고 열...

수식이 걸린 엑셀 데이터, 파이썬으로 불렀더니 NaN이 뜨는 이유와 해결법

실무에서 사용하는 엑셀 파일은 단순한 숫자의 나열이 아닙니다. 단가와 수량을 곱하는 간단한 수식부터, 복잡한 조건부 합계(SUMIFS)까지 다양한 수식들이 거미줄처럼 얽혀있죠. 파이썬 자동화를 처음 배우시는 분들은 이 수식이 걸린 엑셀 파일을 판다스로 호기롭게 불러왔다가, 숫자가 있어야 할 자리에 'NaN(빈칸)'이 가득한 것을 보고 멘붕에 빠지곤 합니다. "엑셀을 열면 분명히 숫자가 잘 보이는데, 왜 파이썬은 빈칸이라고 할까요?" 이것은 파이썬에 에러가 난 것이 아니라, 엑셀과 파이썬이 '수식'을 대하는 근본적인 방식이 다르기 때문입니다. 오늘은 이 치명적인 오류의 원인을 파헤치고, 진정한 의미의 '데이터 자동화'를 위해 수식을 어떻게 다뤄야 하는지 그 해답을 제시해 드립니다. 1. 파이썬은 엑셀의 수식을 '계산'하지 못합니다 가장 먼저 머릿속에 박아두어야 할 핵심 개념입니다. 판다스(Pandas)는 엑셀 프로그램이 아닙니다. 따라서 SUM , VLOOKUP 같은 엑셀 고유의 함수 엔진을 가지고 있지 않습니다. 우리가 pd.read_excel() 로 파일을 불러올 때, 파이썬은 엑셀 파일의 껍데기를 살짝 들춰보고 '가장 마지막에 엑셀이 계산해 둔 결과값(캐시 데이터)'만을 사진 찍듯이 찰칵 찍어옵니다. 즉, 파이썬 안에서 수량 데이터를 10에서 20으로 바꾼다고 해서, 총합계 수식이 자동으로 업데이트되어 바뀌지 않는다는 뜻입니다. 파이썬이 가져온 것은 살아 숨 쉬는 수식이 아니라 '박제된 숫자 텍스트'일 뿐입니다. 2. ERP에서 다운받은 파일이 무조건 NaN을 뱉는 이유 그런데 왜 숫자가 안 나오고 NaN이 뜨는 걸까요? 보통 회사 사내 시스템(ERP 등)에서 다운로드한 엑셀 파일에서 이런 일이 잦습니다. 시스템이 엑셀 파일을 만들어낼 때는 컴퓨터의 리소스를 아끼기 위해 수식(예: =A1*B1 )만 텍스트로 적어놓고, 실제 결과값은 계산하지 않은 채(...

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

"2023.10.01", "23-10-01", "2023년 10월 1일", "10/01/2023"... 여러 부서에서 취합한 엑셀 파일을 열어보면 날짜를 입력하는 방식이 사람마다 그야말로 천차만별입니다. 엑셀에서 이 데이터를 날짜순으로 정렬하거나 월별 매출을 구하려고 피벗 테이블을 돌리면, 컴퓨터는 이를 날짜가 아닌 '단순한 글자(텍스트)'로 인식해서 가나다순으로 엉뚱하게 정렬해 버립니다. 결국 직장인들은 '셀 서식'에 들어가서 날짜 형식으로 억지로 바꿔보거나, 텍스트 나누기를 하고, 심지어 일일이 타자를 다시 치는 엄청난 시간 낭비를 겪게 됩니다. 하지만 파이썬에서는 제아무리 엉망으로 입력된 날짜라도 단 한 줄의 마법 같은 코드로 컴퓨터가 인식할 수 있는 '진짜 날짜'로 완벽하게 통일할 수 있습니다. 오늘은 시계열 데이터 분석의 뼈대가 되는 날짜 데이터 포맷팅 비법을 알아보겠습니다. 1. 엉망진창 날짜를 하나로 통일하는 마법: pd.to_datetime() 파이썬 판다스(Pandas)에는 사람이 쓴 다양한 형태의 날짜 글자를 컴퓨터용 표준 날짜 형식(YYYY-MM-DD)으로 강제 변환해 주는 아주 강력한 함수가 있습니다. 바로 to_datetime() 입니다. 불러온 데이터(df)에 '작성일'이라는 열이 있다고 가정해 봅시다. 주피터 노트북에 df['작성일'] = pd.to_datetime(df['작성일']) 이라고만 입력하고 실행해 보세요. 놀랍게도 점(.)이 찍혀있든, 슬래시(/)가 있든, 한글로 '년월일'이 적혀있든 판다스가 알아서 눈치껏 해석하여 2023-10-01 이라는 깔끔하고 통일된 규격으로 싹 바꿔줍니다. 이제 파이썬은 이 열을 단순한 글자가 아닌 '시간의 흐름'으로 완벽하게 인식하게 됩니다. 2. 컴퓨터도 헷갈리는 날짜 구출하기 (format과 errors...

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

파이썬으로 엑셀 자동화 코드를 잘 짜놓고 기분 좋게 실행했는데, 화면 가득 빨간색 글씨로 FileNotFoundError 가 뜨면 누구나 당황하기 마련입니다. 분명히 내 눈앞 폴더에 파일이 있는데 파이썬은 "파일을 찾을 수 없다"고 우기니 답답할 노릇이죠. 어제까지 잘 되던 코드가 오늘 폴더 이름 하나 바꿨다고 멈춰버리는 일도 허다합니다. 우리가 윈도우 탐색기에서 마우스로 폴더를 클릭해 들어가는 방식은 직관적이지만, 파이썬에게 위치를 알려줄 때는 조금 더 정교한 규칙이 필요합니다. 오늘은 초보자들이 가장 많이 헤매는 '경로(Path)'의 원리를 이해하고, 매일 바뀌는 업무 환경에서도 에러 없이 파일을 척척 찾아내는 스마트한 경로 설정법을 알아보겠습니다. 1. 파이썬이 파일을 찾는 기준: 절대 경로 vs 상대 경로 파이썬이 파일을 찾는 방식은 크게 두 가지입니다. 첫째는 '절대 경로'입니다. 주소창 전체를 복사하는 방식이죠. 예컨대 C:\Users\Desktop\보고서.xlsx 처럼 집 주소를 처음부터 끝까지 다 알려주는 것입니다. 가장 확실하지만, 만약 코드를 다른 사람에게 보내거나 폴더 위치를 살짝만 옮겨도 주소가 통째로 틀려져 에러가 발생한다는 단점이 있습니다. 둘째는 '상대 경로'입니다. "지금 내가 있는 곳에서 바로 옆에 있는 파일을 찾아라"라고 명령하는 방식입니다. 파일 주소 대신 ./보고서.xlsx 처럼 마침표( . )를 사용합니다. 마침표 하나는 '현재 폴더'를 의미합니다. 코드가 들어있는 폴더와 엑셀 파일이 같은 곳에 있다면, 폴더 통째로 위치를 옮겨도 에러 없이 작동하기 때문에 실무에서는 상대 경로를 사용하는 것이 훨씬 유지보수에 유리합니다. 2. 내가 지금 어디에 있지? os.getcwd() 확인하기 상대 경로를 썼는데도 에러가 난다면, 파이썬이 생각하는 '현재 위치'와 내가 생각하는 위치가 다르기 때문입니다. 파이썬은 내가 코드를 ...

더러운 데이터 청소기: 결측치(빈칸)와 중복 데이터 안전하게 제거하는 기준

데이터 분석이나 자동화 보고서를 만들 때 가장 고통스러운 순간은 언제일까요? 코드가 틀렸을 때가 아니라, 내가 믿었던 데이터가 '엉망'일 때입니다. 중간중간 비어있는 칸(결측치), 나도 모르게 두 번 세 번 들어간 중복 데이터들은 결국 잘못된 합계와 평균을 만들어내고, 이는 고스란히 보고서의 오류로 이어집니다. 엑셀에서 일일이 '찾기 및 바꾸기'를 하거나 눈으로 중복을 찾아 지우는 것은 시간도 오래 걸릴뿐더러 실수의 위험도 큽니다. 파이썬 판다스(Pandas)는 이런 '더러운 데이터'를 청소하는 데 최적화된 강력한 도구들을 갖추고 있습니다. 오늘은 실무에서 가장 자주 마주치는 빈칸(NaN)과 중복 데이터를 어떤 기준으로, 얼마나 안전하게 제거해야 하는지 그 실전 테크닉을 공유하겠습니다. 1. 결측치(NaN) 처리: 무조건 지우는 게 정답일까? 데이터를 불러왔을 때 보이는 NaN 은 '값이 없음'을 의미합니다. 엑셀의 빈 셀과 같죠. 이를 처리하는 방법은 크게 두 가지입니다. 아예 삭제하거나, 적절한 값으로 채워 넣는 것입니다. 먼저, 데이터가 너무 많이 비어있어서 가치가 없다고 판단되면 df.dropna() 를 사용합니다. 이 코드 한 줄이면 빈칸이 포함된 모든 행을 통째로 삭제해 줍니다. 하지만 조심해야 합니다. 중요한 매출 데이터가 딱 한 칸 비어있다고 해서 그 행 전체를 지워버리면 전체 실적이 왜곡될 수 있기 때문입니다. 이때 대안으로 사용하는 것이 df.fillna() 입니다. 빈칸을 0으로 채우거나, "미입력" 같은 텍스트로 채워 넣는 방식입니다. 실무에서는 보통 매출 데이터의 빈칸은 0 으로 채우고, 고객 명단의 빈칸은 "무명" 등으로 채워 데이터의 '전체 행 수'를 유지하는 전략을 자주 사용합니다. 2. 중복 데이터 제거: 중복의 기준을 명확히 세우기 여러 개의 엑셀 파일을 하나로 합치다 보면(5편 내용), 동일한 데이터가 중복해서 들어가는...

VLOOKUP보다 빠르고 정확한 파이썬 merge() 함수 활용 실전 사례

직장인들이 엑셀에서 가장 사랑하면서도, 동시에 가장 증오하는 함수가 무엇일까요? 단연코 'VLOOKUP(브이룩업)'일 것입니다. 사번만 있는 매출 데이터에 직원 이름과 부서명을 끌어오기 위해 VLOOKUP 수식을 걸고 밑으로 쫙 드래그하는 순간, 모니터 화면이 하얗게 굳어버리며 '응답 없음'이 뜨던 공포. 직장인이라면 누구나 한 번쯤 겪어보셨을 겁니다. 데이터가 10만 줄만 넘어가도 VLOOKUP은 엑셀을 기절하게 만듭니다. 게다가 원본 데이터의 열(Column) 순서가 하나라도 바뀌면 수식이 전부 엉망으로 꼬여버리고 맙니다. 언제까지 이 불안정한 함수에 우리의 소중한 퇴근 시간을 맡기실 건가요? 파이썬 판다스(Pandas)에는 VLOOKUP의 모든 단점을 완벽하게 보완하면서도 속도는 수백 배 빠른 merge() 라는 마법의 함수가 존재합니다. 오늘은 엑셀 유저들이 가장 환호하는 기능, 파이썬으로 두 개의 데이터를 결합하는 비법을 알아보겠습니다. 1. VLOOKUP의 치명적 단점과 merge()의 등장 엑셀 VLOOKUP은 "기준값에서 오른쪽으로 몇 번째 칸에 있는 데이터를 가져와라"라는 상대적인 위치 기반의 함수입니다. 그래서 중간에 누군가 열을 하나 삽입하거나 삭제하면, 내가 원했던 값이 아닌 엉뚱한 값을 가져오게 됩니다. 수식을 걸어둔 채로 저장하면 파일 용량도 기하급수적으로 커지죠. 반면 파이썬의 merge() 함수는 데이터베이스의 '조인(Join)' 원리를 따릅니다. "몇 번째 칸"이라는 위치가 아니라, "이름이 '사번'인 기둥(열)을 기준으로 두 데이터를 맞춰라"라고 명확하게 이름표를 지정해 줍니다. 따라서 중간에 데이터 순서가 뒤죽박죽 섞여도 절대 에러가 나지 않으며, 수십만 줄의 매칭 작업도 1초면 가볍게 끝납니다. 수식이 아니라 결과값(텍스트) 자체로만 저장되기 때문에 파일 용량도 아주 가볍습니다. 2. 1초 만에 두 데이터 합치기 ...