소연의_개발일지
article thumbnail

판다스를 이용하여 csv 파일을 sql 로 변환하려던 중 

UnicodeDecodeError: 'cp949' codec can't decode byte 0xec in position 51: illegal multibyte sequence

 

오류가 생겼다.

import pandas as pd
import sqlite3

# pandas 라이브러리를 사용해 csv -> sqlite 데이터베이스 변형
con = sqlite3.connect('data.db')

# read_csv() 함수를 사용해 csv파일 읽기
df = pd.read_csv('drinks_price.csv', encoding='cp949')

# to_sql() 함수를 사용하여 데이터를 sqlite에 삽입
# to_sql(테이블이름, db, 만약 존재한다면= 교체, index컬럼 생성x)
df.to_sql('drinks_price', con=con, if_exists='replace', index=False)

#데이터베이스 연결 종료
con.close()

사용한 코드는 이러했다.

원래 cp949 방식으로 인코딩하면 되었었는데, 여기서 사용한 dirnks_price.csv 파일은 구글 스프레드 시트에서 csv 파일로 저장한 파일이기 때문에 자동으로utf-8 형식으로 저장되었다.

참고로 window에서는 는 기본적으로  CP-949로 인코딩을 한다. 

  • Google은 다운로드 시 자동으로 파일을 UTF-8으로 인코딩합니다.

해결방법

해결방법은 간단하다. 인코딩 방식을 UTF-8로 바꿔주면 된다.

df = pd.read_csv('drinks_price.csv', encoding='utf-8')

만약 이렇게 해도 해결되지 않는다면 저장된CSV 파일을 메모장으로 연다.

그리고 다른이름 저장 - 하단의 파일형식을 UTF-8로 바꿔준다.

그리고 실행하면 더이상 오류가 나지 않는다!

 


 

cp-949와 UTF-8의 차이

– Windows의 코드 조합으로 EUC-KR의 확장

– 가변 길이 문자 인코딩으로 1~4바이트까지 사용.

 

 

profile

소연의_개발일지

@ssoyxon

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!