수만 줄의 데이터, 엑셀이 멈출 때 파이썬으로 가볍게 필터링하는 요령


용량이 100MB가 넘어가는 데이터 파일, 혹은 수십만 줄이 쌓여있는 로우 데이터(Raw Data)를 엑셀로 열어본 경험이 있으신가요? 파일을 더블클릭하는 순간 마우스 커서가 뱅글뱅글 돌기 시작하고, 화면은 하얗게 변하며 제목 표시줄에는 '응답 없음'이라는 공포의 단어가 뜹니다. 어찌어찌 파일이 열렸다고 해도, '데이터 필터' 버튼을 누르고 특정 부서나 특정 날짜의 체크박스를 클릭하는 데만 또 수 분의 시간이 걸립니다. 바쁜 업무 시간에 이런 로딩을 기다리며 커피만 홀짝이는 것은 너무나도 큰 시간 낭비입니다.

엑셀은 눈에 보이는 격자무늬(UI)를 화면에 띄우는 데 컴퓨터의 메모리(RAM)를 엄청나게 소모하기 때문에 대용량 처리에 쥐약입니다. 반면, 파이썬은 눈에 보이는 화려한 껍데기 없이 오직 백그라운드에서 연산만 수행하므로 수십만 줄의 데이터도 단 몇 초면 가볍게 처리할 수 있습니다. 오늘은 엑셀에서 우리를 가장 지치게 했던 '조건 필터링' 작업을 파이썬 판다스(Pandas)로 어떻게 순식간에 끝낼 수 있는지, 그 직관적이고 강력한 방법을 알아보겠습니다.


1. 엑셀의 필터 버튼을 대체하는 '조건 마스크' 원리

엑셀에서는 깔때기 모양의 필터 버튼을 눌러서 원하는 항목에 체크 표시를 합니다. 파이썬에서는 이 체크 표시 대신 '조건문'을 사용합니다. 원리는 아주 간단합니다. 파이썬에게 "이 조건이 맞는 줄(행)은 True, 틀린 줄은 False로 표시해 줘"라고 명령한 뒤, True로 표시된 데이터만 쏙 뽑아오는 방식입니다. 이것을 실무에서는 '마스킹(Masking)'이라고 부릅니다.

만약 우리가 불러온 데이터(df)에서 '부서명' 열의 값이 '영업팀'인 데이터만 걸러내고 싶다면 어떻게 해야 할까요? 주피터 노트북에 df[df['부서명'] == '영업팀'] 이라고 적어주기만 하면 끝납니다. 바깥쪽의 대괄호 df[]는 "이 안에 들어갈 조건에 맞는 것만 보여줘"라는 뜻이고, 안쪽의 df['부서명'] == '영업팀'은 실제 우리가 찾고자 하는 조건입니다. (파이썬에서 '같다'는 기호는 =이 아니라 == 두 개를 연속해서 쓴다는 점만 주의하시면 됩니다.) 수십만 줄의 데이터라도 이 코드 한 줄을 실행하고 'Shift + Enter'를 누르는 순간, 즉시 영업팀 데이터만 화면에 필터링 되어 나타납니다.


2. 다중 조건 검색: 엑셀보다 훨씬 직관적인 기호들

실무에서는 하나의 조건만 찾는 경우보다 "영업팀이면서, 동시에 매출액이 100만 원 이상인 건"을 찾는 등 여러 조건을 섞어서 필터링하는 경우가 훨씬 많습니다. 엑셀에서는 필터 창을 여러 번 띄워야 하지만 파이썬에서는 두 가지 기호만 알면 수학 공식처럼 간단하게 연결할 수 있습니다.

  • 그리고(AND): 두 조건이 모두 맞아야 할 때는 & 기호를 씁니다.

  • 또는(OR): 두 조건 중 하나만 맞아도 될 때는 | 기호를 씁니다. (키보드 Enter 키 위에 있는 원화 기호나 백슬래시 키를 Shift와 함께 누르면 나오는 길쭉한 막대기입니다.)

따라서 방금 전의 다중 조건을 코드로 만들면 df[(df['부서명'] == '영업팀') & (df['매출액'] >= 1000000)] 이 됩니다. 여기서 초보자들이 가장 많이 실수해서 에러를 내는 부분이 있습니다. 바로 조건마다 괄호 ()를 씌워주지 않는 것입니다. 파이썬은 어떤 조건을 먼저 계산해야 할지 헷갈려 하기 때문에, 다중 조건을 쓸 때는 반드시 각각의 조건을 둥근 괄호로 예쁘게 감싸주어야 에러 없이 깔끔하게 작동합니다.


3. 특정 단어가 포함된 데이터만 쏙쏙 뽑아내기 (텍스트 필터)

엑셀 필터의 강력한 기능 중 하나인 '텍스트 포함' 기능도 파이썬에서 완벽하게, 오히려 더 빠르고 정확하게 구현할 수 있습니다. 예를 들어 '상품명' 열에서 '노트북'이라는 단어가 들어간 모든 상품(예: 게이밍 노트북, 가벼운 사무용 노트북 등)을 찾고 싶다고 가정해 봅시다.

이때는 글자를 다루는 특별한 함수인 str.contains()를 사용합니다. 코드는 df[df['상품명'].str.contains('노트북', na=False)] 가 됩니다. 여기서 na=False라는 마법의 옵션을 꼭 기억해 두세요! 만약 상품명 칸이 비어있는(결측치, NaN) 데이터가 섞여 있다면 파이썬은 "빈칸에는 글자가 있는지 없는지 모르겠어!"라며 에러를 뱉어냅니다. 이때 na=False를 적어주면 "빈칸은 그냥 조건에 안 맞는 걸로 치고 넘어가"라고 친절하게 알려주는 셈이 되어, 중간에 코드가 멈추는 불상사를 완벽하게 막아줍니다.


퇴근 시간을 앞당기는 단축키

엑셀에서 '응답 없음' 창을 보며 한숨 쉬던 10분이 파이썬에서는 단 0.1초의 연산 과정으로 단축됩니다. 필터링된 결과물은 2편에서 배웠던 to_excel() 함수를 이용해 즉시 새로운 엑셀 파일로 저장할 수 있습니다. 무거운 파일을 억지로 열려고 컴퓨터와 씨름하지 마시고, 오늘 배운 필터링 코드를 통해 원하는 데이터만 가볍게 빼내서 요리하는 효율적인 업무 환경을 구축해 보시기 바랍니다.


마치며

  • 대용량 엑셀 파일은 여는 것조차 컴퓨터 메모리를 크게 잡아먹지만, 파이썬 판다스는 백그라운드 연산을 통해 수십만 줄의 필터링도 수 초 내에 처리한다.

  • 다중 조건을 설정할 때는 &(그리고)와 |(또는) 기호를 사용하며, 반드시 각각의 조건식을 둥근 괄호 ()로 묶어주어야 에러가 발생하지 않는다.

  • 특정 단어가 포함된 데이터를 찾을 때는 str.contains()를 사용하며, 이때 na=False 옵션을 추가하면 빈칸(결측치)으로 인한 런타임 에러를 방지할 수 있다.


원하는 데이터를 필터링하는 방법까지 익히셨다면, 이제 흩어져 있는 자료들을 하나로 뭉칠 차례입니다. 다음 5편에서는 '흩어진 수십 개의 엑셀 파일, 클릭 한 번에 하나의 시트로 병합하기'라는 주제로 매일 아침 취합 업무를 끝내버리는 마법 같은 방법을 다루겠습니다.


여러분은 회사에서 다루는 엑셀 파일 중 가장 용량이 컸거나, 줄 수가 많아서 엑셀을 멈추게 만들었던 데이터는 대략 몇 줄 정도였나요? 그 파일을 다룰 때 어떤 점이 가장 고통스러웠는지 공유해 주세요!


댓글

이 블로그의 인기 게시물

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