본문 바로가기

[근무일지] LV_intern

[파이썬 한글 깨짐] 파이썬(jupyter notebook)으로 엑셀파일 불러오거나 다시 저장할 때 한글 깨짐 해결법_2021.09.14.

TODAY's GOAL

 

파이썬(jupyter notebook)으로 한글이 포함된 파일을 불러올 때 꿻 땗 뻅... 등으로 깨지게 읽히거나,

이것저것 전처리한 파일을 csv로 저장할 때는 잘 저장되지만 엑셀로 저장하면 ㅇㅔㄱㅅㅔㄹ.. 등으로 깨지게 저장되는 경우가 종종 있습니다.

 

이러한 현상을 해결하기 위한 방법이 몇가지 있는데,

그 중 가장 기본적인 방법과 이번에 새로 알게된 방법에 대해서 아래 정리하고자 합니다.


 

1. encoding 설정해주기

 

한글이 포함된 파일을 불러오거나 저장할 때 가장 기본적으로 사용하는 방법입니다. jupyter notebook으로 작업하는 경우, pd.read_csv(encoding='utf-8') / pd.read_excel(encoding='utf-8') 혹은 pd.read_csv(encoding='cpc949') / pd.read_excel(encoding='cpc949')  라고 인코딩을 지정해주면 대부분의 경우 해결됩니다. 위 코드와 같이 read 하는 경우 뿐만 아니라 저장하는 경우에도 마찬가지로 (encoding='utf-8') 을 덧붙여주면 됩니다.

 

jupyter notebook으로 작업하는 경우가 아니라 vscode와 같은 .py 파일에서 작업하는 경우, 파일의 최상단에 #-*- encoding: utf-8 -*- 을 삽입해주면 전체 파일을 encoding 할 때 utf-8로 하겠다는 선언이 되어 해당 방법도 사용이 가능합니다.

 


2. unicodedata 사용하기

unicodedata란 모든 유니코드 문자에 대한 문자속성을 정의하는 유니코드 문자 데이터베이스에 관한 액세스를 제공합니다. (https://docs.python.org/ko/3/library/unicodedata.html 참조)  이를 이용하여 한글 깨짐 현상을 해결하는 방법은 다음과 같습니다.

 

1. pip install unicodedata

2. import unicodedata

3. map(lambda x: unicodedata.normalize('NFC', x)

 

아래 예시 화면을 보시면 본인의 경우 df의 title 컬럼에서 한글 깨짐 현상이 일어나서, df["title"]을 지정하여 df["title"] = df["title"].map(lambda x: unicodedata.normalize('NFC', x)) 이라고 설정해주었습니다. 주피터 노트북 상에서 시각적으로는 아무런 변화가 없는 것으로 보이나, 실제 해당 파일을 다시 엑셀로 저장 시 utf-8이나 cpc949로 해결되지 않던 깨짐 현상이 해결되었습니다.

 


한글 깨짐 해결 방법에 대한 포스팅은 여기까지 입니다. 다음 포스팅에서도 여러가지 데이터 전처리 방법에 대해 다뤄보겠습니다.