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?

3voto

Luk Aron Punkte 1045

Ich habe Schwierigkeiten, eine CSV-Datei in vereinfachtem Chinesisch zu öffnen, die von einer Online-Bank heruntergeladen wurde, Ich habe latin1 versucht, ich habe iso-8859-1 versucht, ich habe cp1252 versucht, alles ohne Erfolg.

Aber pd.read_csv("",encoding ='gbk') erledigt die Arbeit einfach.

2voto

tshirtdr1 Punkte 39

Ich poste ein Update zu diesem alten Thread. Ich habe eine Lösung gefunden, die funktioniert, aber das Öffnen jeder Datei erfordert. Ich habe meine CSV-Datei in LibreOffice geöffnet, wählte Speichern unter > Filtereinstellungen bearbeiten aus. Im Dropdown-Menü wählte ich UTF8-Codierung. Dann fügte ich encoding="utf-8-sig" zu data = pd.read_csv(r'C:\fullpathtofile\filename.csv', sep = ',', encoding="utf-8-sig") hinzu.

Hoffe, das hilft jemandem.

2voto

nbwoodward Punkte 2576

Diese Antwort scheint das Allheilmittel für CSV-Kodierungsprobleme zu sein. Wenn Sie ein seltsames Kodierungsproblem mit Ihrem Header wie folgt erhalten:

>>> f = open(filename,"r")
>>> reader = DictReader(f)
>>> next(reader)
OrderedDict([('\ufeffid', '1'), ... ])

Dann haben Sie ein Byte Order Mark (BOM) Zeichen am Anfang Ihrer CSV-Datei. Diese Antwort behandelt das Problem:

Python read csv - BOM embedded into the first key

Die Lösung besteht darin, die CSV mit encoding="utf-8-sig" zu laden:

>>> f = open(filename,"r", encoding="utf-8-sig")
>>> reader = DictReader(f)
>>> next(reader)
OrderedDict([('id', '1'), ... ])

Hoffentlich hilft das jemandem.

1voto

DaveP Punkte 210

Überprüfen Sie die Codierung, bevor Sie sie an pandas übergeben. Es wird dich verlangsamen, aber...

with open(path, 'r') as f:
    encoding = f.encoding 

df = pd.read_csv(path,sep=sep, encoding=encoding)

In Python 3.7

1voto

Ke Xu Punkte 11

Versuchen Sie dies:

import pandas as pd
with open('filename.csv') as f:
    data = pd.read_csv(f)

Sieht so aus, als würde es sich um die Codierung kümmern, ohne sie ausdrücklich durch ein Argument anzugeben

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