엑셀 정렬·필터 반복 작업 끝! 파이썬으로 데이터 자동 정렬·필터링하기
엑셀 정렬·필터 반복 작업 끝! 파이썬으로 데이터 자동 정렬·필터링하기 (완성 코드 공개)
"이번 달 매출 상위 10개 거래처만 뽑아서 별도 파일로 저장해주세요", "미납 거래처만 필터링해서 팀장님께 공유해주세요"…
엑셀을 열고, 필터를 걸고, 정렬하고, 복사해서 새 파일에 붙여넣고, 저장하는 작업을 매주 반복하고 있지는 않으신가요? 데이터가 바뀔 때마다 처음부터 다시 해야 하고, 조건이 조금이라도 바뀌면 또 다시 손으로 작업해야 합니다. 파이썬을 한 번만 세팅해두면 조건을 바꾸는 것만으로 원하는 데이터를 자동으로 추출하고 정렬해서 새 파일로 저장할 수 있습니다.
1단계: 준비물 설치
파이썬이 설치되어 있어야 합니다. 없다면 python.org에서 최신 버전을 받아 설치하세요. 설치 시 반드시 "Add Python to PATH"에 체크해야 합니다.
터미널(윈도우: CMD 또는 파워셸)을 열고 아래 명령어를 실행하세요:
pip install pandas openpyxl
pandas는 엑셀 데이터를 표 형태로 읽고, 정렬·필터링·저장하는 모든 작업을 처리합니다. openpyxl은 .xlsx 파일을 읽고 쓰는 엔진입니다.
💡 이 코드로 할 수 있는 것: 엑셀 파일을 읽어 특정 조건(금액 이상, 특정 지역, 날짜 범위 등)으로 데이터를 필터링하고, 원하는 열 기준으로 정렬한 뒤 새 엑셀 파일로 저장합니다. 조건만 바꾸면 어떤 형태의 데이터도 처리할 수 있습니다.
2단계: 엑셀 파일 준비
아래와 같은 형태의 엑셀 파일이 있다고 가정합니다. 1행은 헤더(열 이름)이고, 2행부터 실제 데이터가 입력되어 있으면 됩니다.
거래처명 지역 담당자 매출금액 납부상태 ---------------------------------------------- A주식회사 서울 홍길동 5,200,000 완납 B기술연구소 부산 김철수 980,000 미납 C물산 서울 이영희 3,100,000 완납 D상사 대전 박민준 7,400,000 미납 E무역 서울 최수진 1,250,000 완납
열 이름과 데이터 형태는 본인 파일에 맞게 자유롭게 바꿀 수 있습니다.
3단계: 완성 코드
아래 코드를 그대로 복사해서 메모장에 붙여넣고, sort_filter.py로 저장하세요. 저장 시 파일 형식은 "모든 파일", 인코딩은 UTF-8로 설정합니다.
import pandas as pd
from pathlib import Path
# ① 설정: 파일 경로
INPUT_PATH = r"C:\Users\내이름\Desktop\거래처_현황.xlsx" # ← 원본 엑셀 경로
OUTPUT_PATH = r"C:\Users\내이름\Desktop\거래처_필터결과.xlsx" # ← 저장할 경로
# ② 설정: 필터 조건 (필요한 조건만 주석 해제해서 사용)
FILTER_COLUMN = "납부상태" # ← 필터 기준 열 이름
FILTER_VALUE = "미납" # ← 찾을 값 (이 값과 같은 행만 추출)
# ③ 설정: 정렬 조건
SORT_COLUMN = "매출금액" # ← 정렬 기준 열 이름
SORT_ASCENDING = False # ← False: 내림차순(큰 값 먼저) / True: 오름차순
# ④ 엑셀 읽기
df = pd.read_excel(INPUT_PATH, engine="openpyxl")
print(f" ✔ 데이터 로드 완료: 전체 {len(df)}행")
# ⑤ 필터링
filtered = df[df[FILTER_COLUMN] == FILTER_VALUE].copy()
print(f" ✔ 필터링 완료: '{FILTER_VALUE}' 해당 {len(filtered)}행 추출")
# ⑥ 정렬
sorted_df = filtered.sort_values(by=SORT_COLUMN, ascending=SORT_ASCENDING)
sorted_df = sorted_df.reset_index(drop=True)
print(f" ✔ 정렬 완료: '{SORT_COLUMN}' 기준 {'오름차순' if SORT_ASCENDING else '내림차순'}")
# ⑦ 새 엑셀 파일로 저장
sorted_df.to_excel(OUTPUT_PATH, index=False)
print(f"\n✅ 완료! {len(sorted_df)}행 저장 → {OUTPUT_PATH}")
4단계: 실행 방법
- 코드 ① 설정의
INPUT_PATH에 원본 엑셀 파일 경로를 입력합니다. - 코드 ② 설정의
FILTER_COLUMN과FILTER_VALUE에 필터 기준 열 이름과 찾을 값을 입력합니다. - 코드 ③ 설정의
SORT_COLUMN에 정렬 기준 열 이름을,SORT_ASCENDING에 정렬 방향을 입력합니다. - 터미널에서 아래 명령어로 실행합니다:
python sort_filter.py
정상 실행 시 터미널에 이렇게 출력됩니다:
✔ 데이터 로드 완료: 전체 120행 ✔ 필터링 완료: '미납' 해당 23행 추출 ✔ 정렬 완료: '매출금액' 기준 내림차순 ✅ 완료! 23행 저장 → C:\Users\내이름\Desktop\거래처_필터결과.xlsx
원본 파일은 그대로 유지되고, 조건에 맞는 데이터만 추출·정렬된 새 엑셀 파일이 생성됩니다.
5단계: 자주 발생하는 오류와 해결법
오류 1: KeyError: '납부상태'
FILTER_COLUMN에 입력한 열 이름이 엑셀 헤더와 정확히 일치하지 않을 때 발생합니다. 엑셀 1행의 열 이름을 다시 확인하세요. 공백이나 오타가 한 글자라도 다르면 오류가 납니다.
오류 2: 필터링 결과가 0행으로 나옴
FILTER_VALUE에 입력한 값이 엑셀 데이터와 정확히 일치하지 않는 경우입니다. 예를 들어 엑셀에 "미납 "처럼 뒤에 공백이 붙어 있으면 "미납"과 다른 값으로 인식됩니다. 아래 코드를 필터링 전에 추가해 공백을 제거하세요:
df[FILTER_COLUMN] = df[FILTER_COLUMN].astype(str).str.strip()
오류 3: 숫자 열 정렬이 예상과 다르게 됨
매출금액 열에 쉼표(,)가 포함된 텍스트 형태로 저장된 경우 숫자가 아닌 문자로 인식되어 정렬이 이상하게 됩니다. 아래 코드를 정렬 전에 추가해 숫자로 변환하세요:
filtered[SORT_COLUMN] = pd.to_numeric(filtered[SORT_COLUMN].astype(str).str.replace(",", ""), errors="coerce")
응용: 조건을 여러 개 동시에 적용하고 싶다면
필터 조건을 두 개 이상 동시에 적용할 수 있습니다. 코드 ⑤ 필터링 부분을 아래처럼 교체하면 됩니다.
# 예시 1: 미납이면서 매출금액이 1,000,000 이상인 행만 추출 (AND 조건)
filtered = df[
(df["납부상태"] == "미납") &
(df["매출금액"] >= 1000000)
].copy()
# 예시 2: 서울 또는 부산 거래처만 추출 (OR 조건)
filtered = df[
df["지역"].isin(["서울", "부산"])
].copy()
# 예시 3: 매출금액 상위 10개 추출 (상위 N개)
filtered = df.nlargest(10, "매출금액").copy()
💡 이전 게시글과 결합하면: 필터링·정렬된 결과를 차트 자동 저장 편의 코드와 연결하면 조건에 맞는 데이터로 차트를 자동 생성하고, 이메일 자동 발송 편과 결합하면 결과 파일을 담당자에게 자동으로 발송하는 것도 가능합니다.
핵심 요약
- 준비물: Python + pandas + openpyxl 설치 (pip install pandas openpyxl)
- 설정: 파일 경로, 필터 기준 열·값, 정렬 기준 열·방향만 수정
- 실행: 터미널에서 python sort_filter.py 입력
- 결과: 조건에 맞는 데이터만 추출·정렬된 새 엑셀 파일 자동 생성, 원본 파일 유지
이 코드를 응용하면 날짜 범위 필터, 빈 값 제거, 중복 행 제거까지 다양한 데이터 정제 작업을 자동화할 수 있습니다.
