
반응형
1. 오류 발생
- 파이썬에서 데이터를 분석할 때, 가장 먼저 해야 할 일은 데이터 파일을 불러오는 것입니다. 특히 .csv 파일을 활용하는 경우가 많은데, pandas 라이브러리의 read_csv() 함수를 사용하여 데이터를 로드할 수 있습니다. 하지만 파일을 불러오는 과정에서 예기치 않은 오류가 발생할 수 있습니다. 그중에서 가장 흔한 오류 중 하나가 바로 UnicodeDecodeError입니다.
- 예를 들어, 다음과 같이 csv 파일을 불러올 때, 다음과 같은 오류 메시지가 출력될 수 있습니다.
import pandas as pd
df = pd.read_csv("data.csv")
[출력 결과]
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb1 in position 0: invalid start byte
- 이 오류 메시지는 파이썬이 해당 파일을 UTF-8 인코딩 방식으로 읽으려고 시도했지만, 특정 바이트(0xb1)가 UTR-8 형식과 일치하지 않기 때문에 발생하는 문제입니다. 이는 곧 해당 파일이 UTF-8이 아닌 다른 인코딩 방식으로 저장되었음을 의미합니다.
2. 오류 발생 원인
- 이 오류는 주로 파일의 인코딩(Encoding) 방식이 맞지 않을 때 발생합니다. 인코딩이란, 문자를 컴퓨터가 이해할 수 있도록 변환하는 방식을 의미합니다. 일반적으로 csv 파일을 저자할 때, 여러 인코딩 방식이 사용됩니다. 대표적인 인코딩 방식은 다음과 같습니다.
✅ UTF-8 : 대부분의 프로그래밍 언어에서 기본적으로 지원하는 인코딩 방식입니다. 영어 및 대부분의 유니코드 문자를 표현할 수 있습니다.
✅ CP949 / EUC-KR : 한국에서 많이 사용되는 한글 인코딩 방식입니다. 윈도우에 생성된 csv 파일은 종종 CP949 또는 EUC-KR로 저장됩니다.
✅ ISO-8859-1 / Latin-1 : 서유럽 언어를 포함한 특정 문자셋을 지원하는 인코딩 방식입니다.
✅ Shift-JIS : 일본어 문자 인코딩 방식입니다.
- csv 파일이 UTF-8이 아닌 다른 인코딩 방식으로 저장되었다면 데이터를 불러왔을 때, 오류가 발생할 수도 있습니다. 특히 윈도우 환경에서는 기본적으로 CP949 또는 EUC-KR 인코딩이 많이 사용되기에 이와 관련된 인코딩 오류가 자주 발생할 수 있습니다.
3. 해결 방법
- 이 오류를 해결하기 위한 방법은 간단합니다. 파일의 실제 인코딩 방식을 파악한 후, read_csv() 함수에서 적절한 인코딩을 지정해 주면 됩니다.
1) 파일 인코딩 방식 확인하기
import chardet
# 파일을 바이너리 모드로 읽고, 일부 샘플을 추출하여 인코딩을 확인
with open("data.csv", "rb") as f:
result = chardet.detect(f.read(100000))
print(result['encoding'])
- 이와 같은 방식으로 파일이 어떠한 인코딩 방식으로 저장됐는지를 확인할 수 있습니다.
- 이에 따른 결과값은 CP949, EUC-KR, UTF-8 등으로 나타날 것입니다.
2) 적절한 인코딩 방식으로 파일 불러오기
- 파일이 어떠한 인코딩 방식인지를 알았다면, 데이터를 불러올 때 경로 뒤에 encoding = 을 입력하여 해결할 수 있습니다.
- 파일의 인코딩이 CP949로 저장되었다면, 다음과 같이 encoding = "cp949"를 입력해 주시면 됩니다.
- 아마도 이 인코딩 방식에 의한 오류로 인해 제 블로그를 찾으신 분들이 많지 않을까 합니다.
df = pd.read_csv("파일 경로", encoding = "cp949")
- 이와 마찬가지로 EUC-KR, ISO-8859-1 등의 인코딩 방식도 똑같이 해결할 수 있습니다.
# EUC-KR 인코딩 방식일 때,
df = pd.read_csv("파일 경로", encoding = "euc-kr")
# ISO-8859-1 인코딩 방식을 때,
df = pd.read_csv("파일 경로", encoding = "ISO-8859-1")
4. 결론
파이썬에서 csv 파일을 읽을 때 발생하는 UnicodeDecodeError는 주로 파일의 인코딩 방식이 다를 때 발생합니다. 따라서 문제를 해결하는 방식은 다음과 같습니다.
- 파일의 인코딩 방식을 먼저 확인한다. ('chardet.detect()' 사용)
- 적절한 인코딩 옵셩을 추가하여 read_csv() 함수를 사용한다. (예: encoding = "cp949")
이러한 방법을 숙지하면, 데이터 분석 과정에서 발생하는 파일 인코딩 오류를 손쉽게 해결할 수 있습니다.
'데이터 분석 > Python' 카테고리의 다른 글
pandas (3) : 기초 통계 함수 총정리 - describe, groupby, nunique, value_counts, count (0) | 2025.02.10 |
---|---|
pandas (2) : 데이터 추출 방법 정리 / 주피터 노트북 (0) | 2025.02.10 |
pandas 기초 (1) : 데이터 프레임, pandas 패키지 불러오기, 데이터 불러오기, 데이터 확인 / 주피터 노트북 (0) | 2025.02.07 |
파이썬 내장 함수 (1) : 리스트와 관련된 내장 함수 - sum, max, min, sorted, map, abs, len (0) | 2025.02.07 |
파이썬 반복문 (2) : for문 - range(), 딕셔너리(dict) (0) | 2025.02.06 |