686 Stimmen

UnicodeDecodeError beim Lesen einer CSV-Datei in Pandas

Ich führe ein Programm aus, das 30.000 ähnliche Dateien verarbeitet. Eine zufällige Anzahl von ihnen stoppt und produziert diesen Fehler...

  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

Die Quelle/Erstellung dieser Dateien stammt alle vom gleichen Ort. Wie kann ich dies am besten korrigieren, um mit dem Import fortzufahren?

23voto

bhavesh Punkte 247
with open('filename.csv') as f:
   print(f)

Nach Ausführung dieses Codes finden Sie die Codierung von 'filename.csv', dann führen Sie den folgenden Code aus

data=pd.read_csv('filename.csv', encoding="encoding as you found earlier"

Da haben Sie es

13voto

Kunal Kumar Punkte 939

Versuchen Sie, die Codierung zu ändern. In meinem Fall hat encoding = "utf-16" funktioniert.

df = pd.read_csv("file.csv", encoding='utf-16')

11voto

mikey Punkte 1372

Sie können immer versuchen, zuerst die Codierung der Datei mit chardet oder cchardet oder charset-normalizer zu erkennen:

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, "Erkennung der Codierung fehlgeschlagen, handelt es sich um eine binäre Datei?"

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

7voto

Vodyanikov Andrew Punkte 336

In meinem Fall hat eine Datei eine Codierung von USC-2 LE BOM, laut Notepad++. Für Python ist es encoding="utf_16_le".

Hoffentlich hilft es jemandem, eine Antwort etwas schneller zu finden.

6voto

Jan33 Punkte 119

Versuchen Sie, den engine='python' zu spezifizieren. Bei mir hat es funktioniert, aber ich versuche immer noch herauszufinden, warum.

df = pd.read_csv(input_file_path,...engine='python')

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X