본문 바로가기
Computer Science/Error Code

[Data Science] Pandas csv 유니코드 디코드 에러 문제 해결 방법

by Henry Cho 2022. 7. 7.
728x90

 Pandas csv 유니코드 디코드 에러 문제 해결 방법


포스트 난이도: HOO_Middle

 

[Notice] 포스트 난이도에 대한 설명

안녕하세요, HOOAI의 Henry입니다. Bro들의 질문에 대한 내용을 우선적으로 포스팅이 되다 보니 각각의 포스트에 대한 난이도가 달라서 난이도에 대한 부분을 작성하면 좋겠다는 의견을 들었습니다

whoishoo.tistory.com


# pd.read_csv

판다(Pandas)를 통해서 csv 파일을 읽어올 수 있다.

텍스트 형식과 수치 데이터를 다루는 데 있어서 csv 파일 형식으로 데이터셋을 많이 관리하는 편이다.

따라서 데이터 분석과 같은 데이터 사이언스 프로젝트를 수행하는 데 있어서 판다스 또는 판다를 이용한 데이터 읽고 쓰는 과정은 기본적으로 정말 많이 사용하는 기능 중 하나이다.


# csv 파일 형식 한글 깨짐 현상

문제는 국내 데이터셋을 읽고 불러오는데 있어서 한글 깨짐 현상이 발생한다.

영어의 경우에는 문제가 없지만, 한글의 경우에는 인코딩 설정 값에 따라서 깨짐 현상과 같은 문제가 발생할 수 있다.

엑셀 파일 자체에서 발생하는 깨짐 현상은 메모장을 활용해서 인코딩 형식을 바꿔주면 바로 문제 해결이 가능하다.

아래의 포스트를 참고하면 엑셀 파일 한글 깨짐 문제를 해결할 수 있다.

https://whoishoo.tistory.com/214

 

[Data Science] Excel CSV 파일에서 한글 깨짐 현상 해결 방법: 메모장 활용하기

엑셀 CSV 파일에서 한글 깨짐 현상 해결 방법 | Excel CSV File 포스트 난이도: HOO_Junior [Notice] 포스트 난이도에 대한 설명 안녕하세요, HOOAI의 Henry입니다. Bro들의 질문에 대한 내용을 우선적..

whoishoo.tistory.com


# pd.read_csv 인코딩 에러

위와 같이 엑셀에서 발생하는 한글 깨짐 현상은 인코딩 형식 변경 저장으로 바로 문제 해결이 가능하다.

문제는 판다스를 통해 csv 파일을 읽거나 불러올 때 에러가 발생한다는 점이다.

파일의 인코딩 방식을 바꿔서 새로 저장했음에도 불구하고 Pandas에서 csv 파일을 읽거나 불러올 때 인코딩 에러가 발생한다.

(예제에 사용된 데이터는 "해양수산빅데이터 거래소"에서 "국가어항 일반현황"이다.)

https://www.bigdata-sea.kr/datasearch/issue/view.do?prodId=PROD_000045 

 

해양수산빅데이터 거래소

해양수산빅데이터 거래소

www.bigdata-sea.kr

예를 들어 아래와 같은 오류 메세지가 나온다.

import pandas as pd

df = pd.read_csv('국가어항+일반현황.csv')
print(df.to_string())
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc0 in position 740: invalid start byte

이 경우에는 유니코드 디코드 에러에 속하며, 인코딩 형식 문제로 한글 인식이 불가하여 발생하는 에러이다.

문제는 한글이 깨져서라도 컴파일이 되어야 다른 문제점이나 산출된 결과를 살펴볼 수 있는데 컴파일 자체가 이루어지지 않기 때문에 문제점을 눈으로 살펴볼 수가 없다.


# 공공데이터 api 및 csv 인코딩 형식

공공데이터를 활용하거나 국가 기관 프로젝트를 하다보면 데이터 api의 인코딩 형식이 default값과 달라서 이러한 한글 깨짐 현상과 데이터 읽고 불러오기 오류 문제가 발생하는 편이다.

데이터셋 자체에 문제가 있다기 보다는 데이터를 읽고 불러오는 데 있어서 형식이 다르다 보니 컴퓨터가 이를 제대로 출력할 수 없는 것이다.

따라서 공공데이터이면서 한글이 포함된 데이터셋인데 한글 깨짐 및 인코딩 에러 문제가 발생한다면 아래와 같은 방법으로 데이터셋 문제를 쉽게 해결할 수 있다.


# Unicode decode error 문제 해결 방법

우선은 3가지 방법을 소개하려고 한다.

거두절미하고 마지막에 소개된 방법이 문제를 해결하는 방법이기에 맨 아래 3번째 방법을 살펴보면 된다.

과정별로 인코딩 형식이 어떤식으로 바뀌고 출력되는지를 살펴보기 위해 3가지 방법을 작성해보았다.

(예제에 사용된 데이터는 "해양수산빅데이터 거래소"에서 "국가어항 일반현황"이다.)

https://www.bigdata-sea.kr/datasearch/issue/view.do?prodId=PROD_000045 

 

해양수산빅데이터 거래소

해양수산빅데이터 거래소

www.bigdata-sea.kr


우선 첫번째로는 유니코드 디코드 에러 자체를 무시하는 방법이다.

이 방법의 경우에는 한글 깨짐 현상이 발생하지만 우선적으로 결과를 산출할 수 있도록 해준다.

따라서 판다스를 통해서 출력된 데이터셋의 한글 데이터는 깨져서 나오지만 나머지 수치 데이터는 문제없이 출력이 되는 걸 알 수 있다.

import pandas as pd

df = pd.read_csv('국가어항+일반현황.csv', encoding= 'unicode_escape')
print(df.to_string())


두 번째 방법은 인코딩 형식을 바꿔주는 것이다.

csv 파일을 읽어오는 동시에 해당 파일에 대한 인코딩 형식을 바꿔줌으로써 한글 깨짐 현상을 해결할 수 있다.

이때 불러오는 데이터셋 안의 인코딩 형식을 맞게 설정을 해주어야만 깨짐 현상이 발생하지 않고 출력된다.

아래의 경우는 다른 인코딩 형식을 설정했을 때 나오는 잘못된 결과이다.

import pandas as pd

df = pd.read_csv('국가어항+일반현황.csv', encoding= 'cp1252')
print(df.to_string())


# 판다스 한글 깨짐 현상 해결 방법

위와 같은 경우가 발생하지 않기 위해서는 올바른 인코딩 형식을 입력해주어야 한다.

위와 같이 공공데이터나 한글이 포함된 데이터셋을 활용할 경우 인코딩 값을 "cp949"로 설정해주면 된다.

import pandas as pd

df = pd.read_csv('국가어항+일반현황.csv', encoding= 'cp949')
print(df.to_string())

엑셀에서 확인할 수 있는 데이터 그래도 판다스를 통해서도 출력인 되는 걸 확인할 수 있다.


# 데이터 출처

https://www.bigdata-sea.kr/datasearch/issue/view.do?prodId=PROD_000045 

 

해양수산빅데이터 거래소

해양수산빅데이터 거래소

www.bigdata-sea.kr


 

 

728x90

댓글