[Python] pd.DataFrame().to_csv() 한글 깨짐 현상

Posted by
import pandas as pd

city = ['한국', '일본', '미국']
population = [51625561, 123294513, 339996563]
gdp_m = [1810955.87,  4940877.78, 23315080.56]

df = pd.DataFrame(list(zip(city, population, gdp_m)), columns = ['국가', '인구', 'GDP(백만$)'])

df.to_csv('./나라별_인구_GDP.csv', index=False)

df와 같이 한글이 포함된 DataFrame이 있고, 이를 df.to_csv() method로 파일 변환하고자 한다.
그리고 csv를 다시 불러 들일 때 한글이 깨지는 경우가 있다.

DataFrame을 csv로 변환할 때 encoding 이라는 option이 있다.
encoding은 생략할 때 ‘utf-8’로 encoding 하게 된다.

utf-8은 유니코드 encoding 방식이다.
유니코드는 다양한 문자를 모아 놓고 순서대로 번호를 붙여 놓았다. 이 문자들을 번호로 다루는 것이 편리하다. 이렇게 문자마다 붙여 놓은 번호를 코드 포인트(code-point)라고 하고, 앞에 u+를 붙여 표현한다. 유니코드 인코딩 방식에는 utf-8, utf-16, utf-32 이렇게 3가지가 있다. 이 중 ASCII와 호환이 가능하면서 가장 크기가 가벼운 utf-8을 많이 사용한다.

한글이 깨진다는 이야기는 encoding 할 때 ‘utf-8’로 표현이 안된다는 이야기 이므로 ‘utf-8-sig’를 사용하면 해결된다.

‘utf-8-sig’에서 ‘sig’는 ‘signature’의 약칭이며, ‘utf-8-sig’를 사용하면 스트링 즉, 문자열로 처리하는게 아니라 Byte Order Mark(BOM)으로 취급하게 된다.

df.to_csv('filename.csv', index=False, encoding='utf-8') # 한글 깨짐 발생 할 때 

df.to_csv('filename.csv', index=False, encoding='utf-8-sig') # 한글 정상 표현

Leave a Reply

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다