티스토리 뷰
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
'개발 > 파이썬' 카테고리의 다른 글
가져오기 오류: No module name urllib2 (0) | 2022.11.26 |
---|---|
파이썬3에서 StringIO 사용 방법 (0) | 2022.11.26 |
"ImportError: Cannot import name X" 또는 "AttributeError" 를 어떻게 해결하나요? (0) | 2022.11.25 |
다른 .py 파일에서 함수를 호출하려면 어떻게 해야 합니까? (0) | 2022.11.25 |
Attempted relative import in non-package 문제 수정 (0) | 2022.11.25 |