Saltar al contenido

UnicodeDecodeError al leer un archivo CSV en Pandas con Python

Este tutorial ha sido evaluado por nuestros especialistas así garantizamos la veracidad de nuestra esta noticia.

Solución:

read_csv toma un encoding Opción para tratar archivos en diferentes formatos. Yo uso principalmente read_csv('file', encoding = "ISO-8859-1")o alternativamente encoding = "utf-8" para leer, y en general utf-8 por to_csv.

También puede utilizar uno de varios alias opciones como 'latin' en vez de 'ISO-8859-1' (consulte los documentos de python, también para muchas otras codificaciones que puede encontrar).

Consulte la documentación relevante de Pandas, ejemplos de documentos de Python en archivos csv y muchas preguntas relacionadas aquí en SO. Un buen recurso de antecedentes es Lo que todo desarrollador debe saber sobre Unicode y juegos de caracteres.

Para detectar la codificación (suponiendo que el archivo contiene caracteres que no son ascii), puede usar enca (ver página man) o file -i (Linux) o file -I (osx) (ver página de manual).

La más simple de todas las soluciones:

import pandas as pd
df = pd.read_csv('file_name.csv', engine='python')

Solución alternativa:

  • Abra el archivo csv en Editor de texto sublime o Código VS.
  • Guarde el archivo en formato utf-8.

En sublime, haga clic en Archivo -> Guardar con codificación -> UTF-8

Luego, puede leer su archivo como de costumbre:

import pandas as pd
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"

Pandas permite especificar la codificación, pero no permite ignorar los errores para no reemplazar automáticamente los bytes ofensivos. entonces no hay talla única pero de diferentes maneras dependiendo del caso de uso real.

  1. Conoce la codificación y no hay ningún error de codificación en el archivo. Genial: solo tienes que especificar la codificación:

    file_encoding = 'cp1252'        # set file_encoding to the file encoding (utf8, latin1, etc.)
    pd.read_csv(input_file_and_path, ..., encoding=file_encoding)
    
  2. No desea molestarse con la codificación de preguntas, y solo desea que se cargue ese maldito archivo, sin importar si algunos campos de texto contienen basura. Ok, solo tienes que usar Latin1 codificación porque acepta cualquier byte posible como entrada (y lo convierte al carácter Unicode del mismo código):

    pd.read_csv(input_file_and_path, ..., encoding='latin1')
    
  3. Sabe que la mayor parte del archivo está escrito con una codificación específica, pero también contiene errores de codificación. Un ejemplo del mundo real es un archivo UTF8 que ha sido editado con un editor que no es utf8 y que contiene algunas líneas con una codificación diferente. Pandas no prevé un procesamiento de errores especial, pero Python open función tiene (asumiendo Python3), y read_csv acepta un archivo como objeto. Los parámetros de errores típicos que se utilizan aquí son 'ignore' que simplemente suprime los bytes ofensivos o (en mi humilde opinión, mejor) 'backslashreplace' que reemplaza los bytes ofensivos por la secuencia de escape con barra invertida de Python:

    file_encoding = 'utf8'        # set file_encoding to the file encoding (utf8, latin1, etc.)
    input_fd = open(input_file_and_path, encoding=file_encoding, errors = 'backslashreplace')
    pd.read_csv(input_fd, ...)
    
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *