파이썬 pandas read_csv UnicodeDecodeError

kodman ingzart·2022년 5월 15일
0
post-thumbnail

문제 상황

import pandas as pd


def analyze_data(file_path):
    df = pd.read_csv(file_path)
    print(df)

난 그저 csv파일에서 읽어온 데이터를 그대로 df로 만드려고 했다.
다른 아무 작업도 할 생각이 없었고 그냥 csv파일에서 DataFrame으로 읽어오려고 한 게 다였을 뿐이다.

Traceback (most recent call last):
  File "대충코드경로.py", line 16, in <module>
    run()
  File "대충코드경로.py", line 12, in run
    analyze_data("./src/jeju_poi_data.csv")
  File "대충코드경로.py", line 6, in analyze_data
    df = pd.read_csv(file_path)
  File "대충환경경로/lib/python3.9/site-packages/pandas/util/_decorators.py", line 311, in wrapper
    return func(*args, **kwargs)
  File "대충환경경로/lib/python3.9/site-packages/pandas/io/parsers/readers.py", line 680, in read_csv
    return _read(filepath_or_buffer, kwds)
  File "대충환경경로/lib/python3.9/site-packages/pandas/io/parsers/readers.py", line 575, in _read
    parser = TextFileReader(filepath_or_buffer, **kwds)
  File "대충환경경로/lib/python3.9/site-packages/pandas/io/parsers/readers.py", line 933, in __init__
    self._engine = self._make_engine(f, self.engine)
  File "대충환경경로/lib/python3.9/site-packages/pandas/io/parsers/readers.py", line 1235, in _make_engine
    return mapping[engine](f, **self.options)
  File "대충환경경로/lib/python3.9/site-packages/pandas/io/parsers/c_parser_wrapper.py", line 75, in __init__
    self._reader = parsers.TextReader(src, **kwds)
  File "pandas/_libs/parsers.pyx", line 544, in pandas._libs.parsers.TextReader.__cinit__
  File "pandas/_libs/parsers.pyx", line 633, in pandas._libs.parsers.TextReader._get_header
  File "pandas/_libs/parsers.pyx", line 847, in pandas._libs.parsers.TextReader._tokenize_rows
  File "pandas/_libs/parsers.pyx", line 1952, in pandas._libs.parsers.raise_parser_error
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc0 in position 0: invalid start byte

OS 환경은 MAC Monterey이며 파이썬은 3.9 numpy=1.21.5, pandas=1.4.2 환경
읽으려는 csv파일은 한글 텍스트를 포함하고 있는 상황
'unicode', 'decode' 등의 키워드로 보아 누가 봐도 인코딩 문제
누가 봐도 뻔한 "encoding=" 파라미터를 주어 해결 가능한 초밥 문제였다.

import pandas as pd


def analyze_data(file_path):
    df = pd.read_csv(file_path, encoding='utf-8')
    print(df)

저번에 txt 읽을 떄 인코딩 관련으로 문제 생겨서 "encoding='utf-8'" 을 주어 해결한 기억이 있어 똑같이 했는데 왜 똑같은 에러가 뜨는 것인가?


해결책

df = pd.read_csv(file_path, encoding="cp949")

접근은 맞았다.
'encoding' 파라미터로 'utf-8'이 아닌 'cp949'를 주면 되는 거였다.
다만, 전에 txt를 읽어오면서 'cp949' 에러로 인해 'utf-8'을 줬어야 했던 경험이 있는데, 둘 사이에 어떤 복잡한 상황이 있었는지는 시간을 두고 천천히 알아봐야겠다.

profile
An optimist who becomes pessimistic while working

0개의 댓글