티스토리 뷰

반응형

Stack Overflow에 자주 검색, 등록되는 문제들과 제가 개발 중 찾아 본 문제들 중에서 나중에도 찾아 볼 것 같은 문제들을 정리하고 있습니다.

Stack Overflow에서 가장 먼저 확인하게 되는 가장 높은 점수를 받은 Solution과 현 시점에 도움이 될 수 있는 가장 최근에 업데이트(최소 점수 확보)된 Solution을 각각 정리하였습니다.

 

아래 word cloud를 통해 이번 포스팅의 주요 키워드를 미리 확인하세요.

UnicodeDecodeError when reading CSV file in Pandas with Python

Python을 사용하여 Pandas에서 CSV 파일을 읽을 때 UnicodeDecodeError 발생

 문제 내용 

I'm running a program which is processing 30,000 similar files. A random number of them are stopping and producing this error...

나는 30,000개의 유사한 파일을 처리하는 프로그램을 실행하고 있다. 임의의 숫자가 정지하고 이 오류를 생성합니다.

 

File "C:\Importer\src\dfman\importer.py", line 26, in import_chr
     data = pd.read_csv(filepath, names=fields)
File "C:\Python33\lib\site-packages\pandas\io\parsers.py", line 400, in parser_f
     return _read(filepath_or_buffer, kwds)
File "C:\Python33\lib\site-packages\pandas\io\parsers.py", line 205, in _read
     return parser.read()
   File "C:\Python33\lib\site-packages\pandas\io\parsers.py", line 608, in read
     ret = self._engine.read(nrows)
File "C:\Python33\lib\site-packages\pandas\io\parsers.py", line 1028, in read
     data = self._reader.read(nrows)
File "parser.pyx", line 706, in pandas.parser.TextReader.read (pandas\parser.c:6745)
File "parser.pyx", line 728, in pandas.parser.TextReader._read_low_memory (pandas\parser.c:6964)
File "parser.pyx", line 804, in pandas.parser.TextReader._read_rows (pandas\parser.c:7780)
File "parser.pyx", line 890, in pandas.parser.TextReader._convert_column_data (pandas\parser.c:8793)
File "parser.pyx", line 950, in pandas.parser.TextReader._convert_tokens (pandas\parser.c:9484)
File "parser.pyx", line 1026, in pandas.parser.TextReader._convert_with_dtype (pandas\parser.c:10642)
File "parser.pyx", line 1046, in pandas.parser.TextReader._string_convert (pandas\parser.c:10853)
File "parser.pyx", line 1278, in pandas.parser._string_box_utf8 (pandas\parser.c:15657)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xda in position 6: invalid    continuation byte

The source/creation of these files all come from the same place. What's the best way to correct this to proceed with the import?

이러한 파일의 소스/생성은 모두 동일한 위치에서 이루어집니다. import를 진행하기 위해 이것을 수정하는 가장 좋은 방법은 무엇인가요?

 

 

 

 높은 점수를 받은 Solution 

read_csv takes an encoding option to deal with files in different formats. I mostly use read_csv('file', encoding = "ISO-8859-1"), or alternatively encoding = "utf-8" for reading, and generally utf-8 for to_csv.

read_csv는 다른 형식의 파일을 처리하는 인코딩 옵션을 사용합니다. 나는 주로 읽기 위해 read_csv('file', encoding = "ISO-8859-1", 또는 encoding = "utf-8"을 사용하며, 일반적으로 to_csv에는 utf-8을 사용한다.

 

You can also use one of several alias options like 'latin' or 'cp1252' (Windows) instead of 'ISO-8859-1' (see python docs, also for numerous other encodings you may encounter).

ISO-8859-1' 대신 'latin' 또는 'cp1252'(Windows)와 같은 여러 별칭 옵션 중 하나를 사용할 수도 있습니다(다른 수많은 인코딩에 대해서는 python 문서 참조).

 

See relevant Pandas documentation, python docs examples on csv files, and plenty of related questions here on SO. A good background resource is What every developer should know about unicode and character sets.

관련 pandas 설명서를 참조하십시오. csv 파일에 대한 python 문서 예제와 여기 SO에 대한 많은 관련 질문. 모든 개발자가 유니코드와 문자 집합에 대해 알아야 할 것은 좋은 배경 자원이다.

 

To detect the encoding (assuming the file contains non-ascii characters), you can use enca (see man page) or file -i (linux) or file -I (osx) (see man page).

인코딩을 탐지하려면(파일에 ASCII가 아닌 문자가 포함되어 있다고 가정) enca(man 페이지 참조), file -i(linux) 또는 file -I(osx)(man 페이지 참조)를 사용할 수 있습니다.

 

 

 

 가장 최근 달린 Solution 

You can always try to detect the encoding of the file first, with chardet or cchardet or charset-normalizer:

chardet 또는 chardet 또는 charset-normalizer를 사용하여 항상 파일의 인코딩을 먼저 탐지할 수 있습니다.

 

from pathlib import Path
import chardet

filename = "file_name.csv"
detected = chardet.detect(Path(filename).read_bytes())
# detected is something like {'encoding': 'utf-8', 'confidence': 0.99, 'language': ''}

encoding = detected.get("encoding")
assert encoding, "Unable to detect encoding, is it a binary file?"

df = pd.read_csv(filename, encoding=encoding)

 

 

출처 : https://stackoverflow.com/questions/18171739/unicodedecodeerror-when-reading-csv-file-in-pandas-with-python

반응형
댓글
공지사항
최근에 올라온 글