para - UnicodeDecodeError al leer el archivo CSV en pandas con Python
leer archivos csv en python (3)
Luchando con esto por un tiempo y pensé que publicaría en esta pregunta ya que es el primer resultado de búsqueda. Agregando la etiqueta encoding = ''iso-8859-1'' a pandas read_csv no funcionó, ni ninguna otra codificación, siguió dando un UnicodeDecodeError.
Si está pasando un manejador de archivo a pd.read_csv (), debe poner el atributo encoding = en el archivo abierto, no en read_csv. Obvio en retrospectiva, pero un error sutil para rastrear.
Estoy ejecutando un programa que procesa 30,000 archivos similares. Un número aleatorio de ellos se detiene y produce este error ...
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
La fuente / creación de estos archivos provienen del mismo lugar. ¿Cuál es la mejor manera de corregir esto para proceder con la importación?
read_csv
toma una opción de encoding
para tratar con archivos en diferentes formatos. Uso principalmente read_csv(''file'', encoding = "ISO-8859-1")
, o alternativamente encoding = "utf8"
para leer, y generalmente utf-8
para to_csv
.
También puede usar el alias ''latin1''
lugar de ''ISO-8859-1''
.
Consulte la documentación relevante de Pandas , python pone ejemplos en archivos csv y muchas preguntas relacionadas aquí en SO.
La más simple de todas las soluciones:
- Abra el archivo csv en el editor de texto Sublime .
- Guarde el archivo en formato utf-8.
En sublime, haga clic en Archivo -> Guardar con codificación -> UTF-8
Luego, puedes leer tu archivo como de costumbre:
import pandas as pd
data = pd.read_csv(''file_name.csv'', encoding=''utf-8'')
EDIT 1:
Si hay muchos archivos, puede omitir el paso sublime.
Solo lea el archivo usando
data = pd.read_csv(''file_name.csv'', encoding=''utf-8'')
y los otros tipos de codificación diferentes son:
encoding = "cp1252"
encoding = "ISO-8859-1"