월요일 아침, 출근 직후 이메일에 첨부된 10MB짜리 엑셀 파일 하나가 도착했다. 파일명은 ‘2024_매출_원본_v3_최종.xlsx’. 더블클릭을 하려다 손을 멈추고, 파일 크기를 보며 깊은 한숨이 나온다. 열려는 봤는데, 몇 초간 멈춘 프로그램이 150MB에 달하는 데이터를 겨우 불러오고, 화면에는 3만 개의 행과 40개의 열이 넘실댄다. 스크롤을 아무리 내려도 데이터의 끝이 보이지 않고, SUM 함수를 걸어보려 했지만 어떤 열이 숫자고 어떤 열이 문장인지조차 감이 오지 않는다. 이 순간 필요한 것이 데이터프레임을 다루는 기본기다. 이 글은 파이썬 판다스(pandas)를 처음 접하는 입문자를 위해, 복잡한 코딩 테스트 문제풀이 대신 실제 업무에서 마주치는 엑셀 파일 구조에 빗대어 설명한다. ‘엑셀 기초 데이터 정리 방법’과 ‘파이썬 판다스 입문 가이드’의 접점을 찾는 여정이다.
일단 엑셀에서 데이터를 정리할 때 가장 흔한 실수는 병합된 셀, 공백이 섞인 셀, 그리고 숫자 앞에 붙은 작은따옴표다. 판다스에서는 이러한 지저분한 구조를 데이터프레임(DataFrame)이라는 2차원 표로 변환한다. 데이터프레임은 엑셀의 시트 하나와 동일한 개념이지만, 다루는 방식이 훨씬 명확하다. 행과 열의 위치를 숫자가 아닌 이름으로 참조하며, 각 열은 반드시 하나의 데이터 타입(숫자, 문자, 날짜 등)을 가진다는 규칙이 있다. 이 규칙 하나만 기억해도 데이터 정리의 절반은 끝난 셈이다.
엑셀에서 데이터를 읽어오는 가장 기본적인 코드는 한 줄이면 충분하다. 파일을 읽은 직후에는 반드시 데이터의 형태를 파악하는 습관이 필요하다. 대부분의 입문자는 이 단계를 건너뛰고 바로 분석으로 달려가지만, 데이터프레임의 행과 열 개수, 각 열의 이름과 데이터 타입을 확인하는 것이 순서다. 마치 새 팀에 합류했을 때 조직도부터 보는 것과 같다. 어떤 부서가 있고, 각 부서에 몇 명이 있는지 알아야 업무를 배정받을 수 있듯이, 어떤 열이 존재하고 그 열이 어떤 성격인지 파악해야 다음 단계로 넘어갈 수 있다.
실제 업무 파일을 예로 들어보자. ‘고객_응대_내역.xlsx’라는 파일에 1월부터 6월까지의 상담 기록이 담겨 있다고 가정한다. 첫 번째 열은 상담일자, 두 번째 열은 고객 ID, 세 번째 열은 상담 채널, 네 번째 열은 상담 시간(분), 다섯 번째 열은 만족도 점수다. 엑셀에서 이 파일을 열었다면, 필터를 걸어 채널별 건수를 세고, 평균 만족도를 구하려면 여러 단계를 거쳐야 한다. 판다스에서는 특정 열 하나만 뽑아내는 방식이 ‘열 선택’이다. 데이터프레임 이름 뒤에 대괄호를 붙이고 열 이름을 따옴표로 감싸는 방식이 기본이다. 단일 열을 선택하면 ‘시리즈(Series)’라는 1차원 구조가 반환되고, 여러 열을 리스트로 묶어 선택하면 다시 데이터프레임이 반환된다. 이 차이는 이후 통계 함수를 적용할 때 중요해진다.
열 선택에서 유의해야 할 점은 열 이름에 공백이나 특수문자가 있는 경우다. 엑셀에서는 ‘고객 ID’처럼 띄어쓰기를 넣는 것이 자연스럽지만, 판다스에서는 점(.)이나 언더바(_)로 대체하는 것이 안전하다. 하지만 이미 파일에 공백이 있는 상태로 받았다면, 열 이름을 변경하는 방법도 알아야 한다. 열 이름을 일괄 변경하거나, 특정 열만 골라 새 이름을 부여하는 방식 모두 문법이 간단하다. 이 과정에서 엑셀의 ‘머리글 바꾸기’ 기능과 비교하면 이해가 빠르다. 다만 엑셀은 시트 전체를 대상으로 하지만, 판다스는 열 이름 목록을 직접 지정한다는 점이 다르다.
데이터프레임에서 행을 선택하는 방식은 엑셀과 다소 다르다. 엑셀은 행 번호를 직접 클릭하거나 ‘이동’ 기능을 사용하지만, 판다스는 위치 기반과 이름(라벨) 기반의 두 가지 방식을 제공한다. 위치 기반은 0부터 시작하는 정수 인덱스를 사용하며, 이름 기반은 행에 부여된 인덱스 라벨을 사용한다. 입문자에게 추천하는 방법은 위치 기반부터 익히는 것이다. 항상 0부터 세기 시작한다는 것만 기억하면 혼란이 줄어든다. 상위 5개 행을 미리보는 명령어, 하위 5개 행을 미리보는 명령어는 데이터의 개략적인 흐름을 파악하는 데 유용하다. 엑셀의 ‘스크롤’과 같은 역할이지만, 시간을 훨씬 절약해 준다.
숫자로 가득한 열을 선택한 뒤에는 여러 가지 요약 통계를 한 번에 확인할 수 있다. 이 기능은 엑셀의 ‘요약 행’과 유사하지만, 모든 열에 대해 동시에 적용된다는 장점이 있다. 평균, 최소값, 최대값, 4분위수 같은 지표들이 표로 출력되며, 이 결과를 보면 데이터의 분포가 눈에 들어온다. 예를 들어 상담 시간 열의 평균이 15분인데 최대값이 300분이라면, 특이값이 존재한다는 것을 짐작할 수 있다. 엑셀에서 이 값을 찾으려면 정렬을 하거나 조건부 서식을 걸어야 하지만, 판다스는 한 줄의 명령어로 분포의 윤곽을 잡아준다.
결측치 처리는 데이터 분석에서 피할 수 없는 숙제다. 엑셀에서는 빈 셀을 눈으로 찾아 일일이 채우거나 삭제하지만, 데이터가 몇만 행이라면 불가능에 가깝다. 판다스는 각 열별로 결측치가 몇 개인지 한 번에 세어주고, 이를 기준으로 행을 삭제하거나 특정 값으로 채우는 선택지를 제공한다. 입문 단계에서는 무작정 삭제하기보다는, 결측치가 많은 열의 특성을 먼저 이해하는 것이 바람직하다. 예를 들어 ‘고객 이메일’ 열의 결측치가 20%라면, 이메일이 없는 고객을 분석 대상에서 제외하는 것이 합리적인지, 별도의 그룹으로 분류할 것인지 결정해야 한다.
데이터프레임을 다루다 보면 엑셀에서는 어려웠지만 판다스에서 쉬워지는 작업을 발견하게 된다. 대표적인 것이 조건에 맞는 행만 추출하는 것이다. 엑셀의 ‘자동 필터’와 동일한 기능이지만, 코드 한 줄로 여러 조건을 중첩할 수 있다. 예를 들어 상담 채널이 ‘앱’이면서 만족도 점수가 4점 이상인 데이터만 추출하는 경우, 엑셀에서는 필터 조건을 두 개 걸어야 하지만 판다스에서는 논리 연산자로 묶어 한 번에 처리한다. 이때 주의할 점은 조건을 괄호로 각각 감싸고, ‘그리고’에 해당하는 연산자와 ‘또는’에 해당하는 연산자를 구분하는 것이다. 이 구분을 실수하면 데이터가 비어버리는 결과를 볼 수 있다.
정렬 기능도 엑셀과 비교하면 판다스가 확실히 빠르다. 열 한 개를 기준으로 오름차순과 내림차순을 지정할 수 있고, 여러 열을 동시에 정렬 기준으로 삼을 수도 있다. 정렬한 이후에 순위를 매기는 작업까지 한 번에 진행된다. 상담 시간을 기준으로 정렬한 뒤 상위 10개 행만 추출하면, 가장 오래 걸린 상담 건이 무엇인지 즉시 확인할 수 있다. 이는 업무 우선순위를 정하는 데 유용한 방식이다.
이 글의 마무리에서 제안하는 실전 워크플로는 다음과 같다. 첫째, 파일을 읽은 직후 형태와 타입을 확인한다. 둘째, 상위와 하위 행을 미리보기하여 데이터의 대략적인 생김새를 파악한다. 셋째, 요약 통계를 실행해 숫자 열의 분포를 빠르게 파악한 뒤, 특이값이 의심되면 해당 행을 추출해 직접 확인한다. 넷째, 결측치 현황을 확인하고 처리 방침을 정한다. 마지막으로, 필요하다면 열 선택과 조건 필터링을 적용해 분석에 필요한 최소한의 데이터셋으로 줄인다. 이 과정은 엑셀에서 같은 작업을 하는 것보다 훨씬 빠르며, 무엇보다 어떤 처리를 거쳤는지 코드로 기록이 남기 때문에 나중에 같은 작업을 다시 해야 할 때 반복 실행할 수 있다는 장점이 있다.
판다스는 엑셀을 대체하는 도구가 아니라, 엑셀에서 하기 어려운 반복 작업과 대용량 처리를 위한 도구로 이해하는 것이 적절하다. 처음에는 익숙한 엑셀보다 불편할 수 있지만, 데이터의 규모가 커지고 처리 과정이 반복될수록 그 차이는 명확해진다. 이 글에서 소개한 데이터프레임 생성과 열 선택의 기본기만 익혀도, 월요일 아침의 10MB짜리 파일 앞에서 더 이상 막막하지 않을 것이다. 데이터프레임 안에 어떤 정보가 들어있는지 한 줄로 확인하고, 필요한 열만 골라내는 순간, 복잡했던 엑셀 파일이 하나의 명확한 표로 정리되는 경험을 하게 된다. 다음 단계로 넘어가기 위한 출발점은 이미 준비된 셈이다.