데이터를 수작업 대신 pandas로 정리하는 이유는 무엇입니까?
pandas로 데이터를 정리하면 모든 단계가 기록되어 다음 달에 내보낸 데이터에도 몇 초 만에 다시 실행할 수 있습니다. 반면 스프레드시트에서 수동으로 수정하면 시간이 오래 걸리고, 수정 사항을 잊기 쉬우며, 감사도 불가능합니다.
매장 네 곳을 운영하는 가상의 원예용품 판매 그룹 펀힐 가든스를 가정합니다. 재무 분석가 토마시는 매달 온라인 주문 내역을 CSV 파일로 받습니다. 아래 예시에는 같은 주문이 두 번 나오고, 매장 이름이 여러 방식으로 입력되어 있으며, 금액에 통화 기호와 쉼표가 포함되어 있습니다. 날짜는 일부터 쓰는 형식과 연도부터 쓰는 형식이 섞여 있고, 결측값은 빈칸, '해당 없음', '-'로 표시되어 있습니다. 수작업으로 고치는 데 하루가 걸리며, 합계는 결제 서비스 업체의 보고서와 좀처럼 일치하지 않습니다.
| order_id | site | order_date | amount | postcode |
|---|---|---|---|---|
| 10231 | 리즈 | 03/11/2026 | £1,240.00 | LS6 |
| 10231 | 리즈 | 03/11/2026 | £1,240.00 | LS6 |
| 10232 | 리즈 | 2026-11-04 | 86.50 | 해당 없음 |
| 10233 | 요크 | 05/11/2026 | - | YO1 |
| 10234 | 해러게이트 | 142 |
pandas로 데이터를 어떻게 단계별로 정제합니까?
pandas에서 데이터를 정리하려면 결측값으로 처리할 표기를 지정해 데이터를 불러온 뒤, 데이터를 살펴보고, 텍스트 형식을 통일하고, 숫자와 날짜를 변환하고, 중복을 제거하고, 남은 결측값의 처리 방법을 정한 다음, 신뢰할 수 있는 합계와 비교해 결과를 확인합니다. 이 순서를 따르면 한 수정 작업이 다른 수정 작업을 되돌리는 일을 막을 수 있습니다.
1. 결측값 표시를 지정하여 불러오기
pandas의 read_csv 함수는 파일을 읽어 DataFrame으로 불러옵니다. na_values 인수를 사용하면 pandas가 기본적으로 결측값으로 인식하는 빈 필드 외에도 'N/A', '-' 같은 문자열을 결측값으로 처리하도록 추가로 지정할 수 있습니다. 여기서 미리 지정하면 나중에 따로 찾아낼 필요가 없습니다.
2. 변경하기 전에 점검하기
head로 첫 몇 행을 확인하고, info로 열의 자료형과 결측값이 아닌 값의 개수를 확인한 다음, isna와 sum을 조합해 열별 결측값 개수를 확인합니다. 확인한 내용을 기록합니다. Fernhill에서는 amount가 텍스트로 저장되어 있고 order_date에 여러 날짜 형식이 섞여 있습니다.
3. 텍스트를 표준화합니다
열에 문자열 메서드를 사용합니다. str.strip은 앞뒤 공백을 제거하고, str.lower 또는 str.title은 대소문자를 통일하여 ' Leeds', 'leeds ', 'LEEDS'가 하나의 사업장으로 처리되도록 합니다. 그런 다음 unique로 고유값 목록을 확인하여 남아 있는 표기 차이를 찾습니다.
4. 숫자를 변환합니다
str.replace로 통화 기호와 천 단위 구분 쉼표를 제거한 다음 to_numeric으로 변환합니다. errors 인수를 coerce로 설정하면 해석할 수 없는 값이 있어도 중단하지 않고 결측값으로 바꿉니다. 따라서 해당 행을 모르는 사이에 잃는 대신 개수를 세고 검토할 수 있습니다.
5. 날짜 변환하기
to_datetime은 텍스트를 올바른 날짜 형식으로 변환합니다. 형식이 섞여 있다면 가능한 경우 형식을 명시하거나, 영국식 날짜에는 dayfirst를 설정하고 errors를 coerce로 설정해 해석할 수 없는 날짜를 pandas에서 날짜 누락을 나타내는 NaT로 변환합니다. dayfirst는 엄격한 규칙이 아니라 우선 적용할 기준이므로 결과를 확인해야 합니다.
6. 중복 제거하기
drop_duplicates는 중복 행을 제거합니다. 기본적으로 모든 열의 값이 일치해야 중복 행으로 간주합니다. subset 인수를 사용하면 order_id 같은 특정 열을 기준으로 중복 여부를 판단할 수 있으며, keep은 첫 번째 행과 마지막 행 중 어느 것을 남길지 결정합니다.
7. 남은 미흡한 부분의 처리 방안 결정하기
dropna는 결측값이 있는 행을 제거하지만, 기본적으로 열 하나라도 값이 없으면 해당 행을 제거합니다. amount처럼 꼭 필요한 값이 없는 행만 제거하려면 subset 인수를 사용하고, 빈 값을 지정한 값으로 채우려면 fillna를 사용합니다. 그런 다음 astype을 사용해 열의 최종 자료형을 설정합니다. 예를 들어 site를 범주형으로 설정할 수 있습니다.
미흡한 데이터 정제 작업과 개선된 정제 작업은 어떻게 다릅니까?
미흡한 처리 방식은 read_csv로 파일을 불러온 뒤, 인수 없이 dropna를 호출하고 이어서 인수 없이 drop_duplicates를 호출합니다. 우편번호가 비어 있는 경우가 많아 dropna가 유효한 주문의 상당 부분을 삭제하며, ' Leeds'와 'leeds '는 여전히 서로 다른 값이므로 일부 중복이 남습니다. 매출은 실제보다 훨씬 낮게 나오고, 어떤 행이 삭제되었는지 아무도 알지 못합니다.
개선된 처리 과정에서는 불러올 때 'N/A'와 '-'를 누락값으로 지정하고, site의 앞뒤 공백을 제거한 뒤 각 단어의 첫 글자를 대문자로 바꿉니다. amount에서는 '£'와 쉼표를 제거한 뒤 to_numeric으로 변환하고, order_date는 dayfirst와 coerce를 사용해 변환합니다. order_id를 기준으로 중복을 판단해 첫 번째 항목만 남기고, amount가 누락된 행만 삭제합니다. 그런 다음 각 단계에서 제거한 행 수를 출력하고 총매출을 결제 서비스 제공업체의 보고서와 비교합니다. 이제 Tomasz는 모든 차이를 설명할 수 있습니다.
데이터 정제가 제대로 되었는지 어떻게 확인합니까?
데이터 정제 과정을 점검하려면 각 단계 전후의 행 수를 세고, 주요 합계가 독립적인 출처와 일치하는지 비교하며, 값이 결측값으로 강제 변환된 행을 검토합니다. info를 다시 실행해 열의 자료형을 확인하고 사업장과 같은 범주형 항목의 고유 값 목록을 확인합니다. 어떤 단계에서 예상보다 많은 행이 삭제됐다면 다음 단계로 넘어가기 전에 해당 행을 살펴봅니다.
AI 도우미는 pandas를 이용한 데이터 정제에 어떻게 도움을 줄 수 있습니까?
각 열의 내용과 문제점, 적용하려는 규칙을 설명하면 AI 어시스턴트가 데이터 정제 단계의 초안을 작성하고 익숙하지 않은 함수도 설명할 수 있습니다. 이름, 주소, 전체 우편번호 같은 실제 고객 데이터를 붙여 넣는 대신 가상의 예시 값으로 구조를 설명합니다. 각 단계가 끝날 때마다 행 수를 보고하도록 요청하고, 사용한 모든 함수 인수를 공식 pandas 문서와 대조해 확인합니다. 어시스턴트가 존재하지 않거나 버전에 따라 달라진 옵션을 제안하는 경우가 있기 때문입니다.
pandas로 데이터를 정제할 때 흔히 하는 실수는 무엇입니까?
가장 흔한 실수는 인수 없이 dropna를 호출해, 선택 항목인 열 하나를 제외하면 문제가 없던 행까지 잃는 것입니다. 그 밖에도 텍스트를 표준화하기 전에 중복을 제거하거나, 일과 월의 순서를 확인하지 않고 날짜를 변환하거나, 원본 파일을 덮어쓰거나, 정제 후 합계를 신뢰할 수 있는 수치와 비교하지 않는 실수가 있습니다.
Tosheo.ai에서 이 수업은 어디에 해당합니까?
이 수업은 데이터 과학 과정의 데이터 과학 및 분석 범주에 속하는 코드 수업입니다. Tosheo.ai의 모든 주제는 개념과 코딩 없는 실습으로 시작하며, 코드 수업은 선택형 심화 트랙입니다. 가입 후 제공되는 이 수업의 전체 실습 버전에서는 파이썬과 pandas로 각 데이터 정제 단계를 직접 작성하고 실행하며, 평가 기준에 따라 채점받습니다. 파이썬이 처음이라면 파이썬 과정부터 시작하면 됩니다. 이 과정은 실무 역량을 기르는 과정이지, 집중 교육 과정이나 취업 보장 프로그램이 아닙니다.
출처와 범위
pandas 문서: read_csv (19 October 2026 확인) ↗
pandas 사용자 가이드: 결측 데이터 처리 (19 October 2026 확인) ↗
pandas 문서: DataFrame.dropna (19 October 2026 확인) ↗
pandas 문서: DataFrame.drop_duplicates (19 October 2026 확인) ↗
pandas 문서: DataFrame.astype (19 October 2026 확인) ↗
pandas 문서: to_numeric (19 October 2026 확인) ↗