reading read open leer how from data create python pandas utf-8 python-unicode

python - read - UnicodeDecodeError:(códec ''utf-8'') mientras lee un archivo csv



save to csv python (6)

Esta pregunta ya tiene una respuesta aquí:

Lo que estoy intentando es leer un csv para hacer un marco de datos --- hacer cambios en una columna --- nuevamente actualizar / reflejar el valor cambiado en el mismo csv (to_csv) - otra vez tratando de leer ese csv para hacer otro marco de datos ... allí recibo un error

UnicodeDecodeError: ''utf-8'' codec can''t decode byte 0xe7 in position 7: invalid continuation byte

mi código es

import pandas as pd df = pd.read_csv("D:/ss.csv") df.columns #o/p is Index([''CUSTOMER_MAILID'', ''False'', ''True''], dtype=''object'') df[''True''] = df[''True''] + 2 #making changes to one column of type float df.to_csv("D:/ss.csv") #updating that .csv df1 = pd.read_csv("D:/ss.csv") #again trying to read that csv UnicodeDecodeError: ''utf-8'' codec can''t decode byte 0xe7 in position 7: invalid continuation byte

Por lo tanto, sugiera cómo puedo evitar el error y poder volver a leer ese csv en un marco de datos.

Sé que en algún lugar me falta "codificar = algún tipo de códec" o "decodificar = algún tipo" mientras leo y escribo en csv.

Pero no sé exactamente qué se debe cambiar. Necesito ayuda.


Codificación conocida

Si conoce la codificación del archivo que desea leer, puede usar

pd.read_csv(''filename.txt'', encoding=''encoding'')

Estas son las posibles codificaciones: https://docs.python.org/3/library/codecs.html#standard-encodings

Codificación desconocida

Si no conoce la codificación, puede intentar usar chardet, sin embargo, no se garantiza que funcione. Es más un trabajo de adivinar.

import chardet import pandas as pd with open(''filename.csv'', ''rb'') as f: result = chardet.detect(f.read()) # or readline if the file is large pd.read_csv(''filename.csv'', encoding=result[''encoding''])


¿Ese error ocurre en la primera lectura de los datos, o en la segunda lectura después de que lo escribe y vuelve a leerlo? Supongo que en realidad está sucediendo en la primera lectura de los datos, porque tu CSV tiene una codificación que no es UTF-8.

Intente abrir ese archivo CSV en Notepad ++, o Excel, o LibreOffice. ¿Tiene su fuente de datos el carácter ç (C con cedilla)? Si lo hace, entonces ese byte 0xE7 que está viendo probablemente sea el codificado en cualquiera de Latin-1 o Windows-1252 (llamado "cp1252" en Python).

Al read_csv() la documentación de la función Pandas read_csv() , veo que tiene un parámetro de encoding , que debería ser el nombre de la codificación en la que espera que esté el archivo CSV. Por lo tanto, intente agregar encoding="cp1252" a su read_csv() llamar, de la siguiente manera:

df = pd.read_csv(r"D:/ss.csv", encoding="cp1252")

Tenga en cuenta que agregué el carácter r en frente del nombre del archivo, por lo que se considerará una "cadena en bruto" y las barras invertidas no se tratarán especialmente. De esta forma, no se sorprenderá cuando cambie el nombre de archivo de ss.csv a new-ss.csv , donde la cadena D:/new-ss.csv se leerá como D , : , carácter de nueva línea, e , w , etc.

De todos modos, pruebe ese parámetro de codificación en su primera llamada read_csv() y vea si funciona. (Es solo una suposición, ya que no conozco sus datos reales. Si el archivo de datos no es privado y no es demasiado grande, intente publicar el archivo de datos para que podamos ver su contenido, eso nos haría mejores que solo adivinar.)


El método anterior usado al importar y luego detectar el tipo de archivo funciona importar chardet

with open(''filename.csv'', ''rb'') as f: result = chardet.detect(f.read()) # or readline if the file is large pd.read_csv(''filename.csv'', encoding=result[''encoding''])


Sí, obtendrás este error. Tengo que solucionar este problema, abriendo el archivo csv en el bloc de notas ++ y cambiando la codificación a través del menú de codificación -> convertir a UTF-8. Luego guardando el archivo. Entonces nuevamente corriendo el programa de Python sobre él.

Otra solución es usar el módulo de códecs en python para la codificación-decodificación de archivos. No he usado eso.


Soy nuevo en Python. Se topó con este problema exacto cuando cambié manualmente la extensión en mi archivo Excel a .csv y traté de leerlo con read_csv. Sin embargo, si abrí el archivo Excel y lo guardé como un archivo csv, pareció funcionar.


Una solución simple es que puede abrir el archivo csv en un editor como Sublime Text y guardarlo con la codificación ''utf-8''. Entonces podemos leer el archivo fácilmente a través de pandas.