Causas y soluciones para UnicodeDecodeError [Python]
Cuando intenté leer un conjunto de datos en formato de archivo csv con pandas, inmediatamente encontré el error "UnicodeDecodeError: codec 'utf-8' no puede decodificar el byte 0x91 en la posición 1: byte de inicio no válido". Tome nota.
contenido del error
Lea el archivo csv con pd.read_csv.Luego ...
importar pandas como pd df = pd.read_csv ('data.csv')
>> UnicodedeCodeError: el códec 'utf-8' no puede decodificar el byte 0x91 en la posición 1: byte de inicio no válido
Obtuve un error de decodificación Unicode (convertir un código de carácter en un carácter).
Por cierto, la conversión de caracteres en códigos de caracteres se denomina codificación.
Porque
Dentro de la computadora personal, los caracteres no se reconocen como son, sino que se tratan como números (códigos de caracteres) asignados a cada carácter por adelantado.
Hay muchos tipos de códigos de caracteres según el idioma y cómo asignar números. UTF-8 es uno de los métodos de codificación para Unicode establecido como estándar unificado del estándar mundial para que pueda usarse en cualquier idioma.
Sin embargo, UTF-8 tampoco parece ser perfecto (Wikipedia:Problemas de Unicode en el entorno japonés)
No sé el carácter que causó el problema, pero dado que el archivo csv contenía caracteres japoneses, la mala conversión entre el código de caracteres japoneses y UTF-8 causó el error de decodificación Unicode. Parece que sí.
解決 策
Al leer con read_csv (), especifique el formato de codificación desde el argumento hasta el código de caracteres japoneses (shift_jis, etc.).
df = pd.read_csv ('data.csv', encoding = 'shift_jis')
Pude leerlo con éxito.
Otros formatos de codificaciones compatibles con japonés
Por cierto, hay varios códigos de caracteres que pueden expresar japonés y Python implementa lo siguiente como estándar. (Referencia:Lista de codificaciones estándar de Python )
- cp932
- euc_jp, euc_jis_2004, euc_jisx0213
- iso2022_jp, iso2022_jp_1, iso2022_jp_2, iso2022_jp_3
- iso2022_jp_2004, iso2022_jp_2ext
- shift_jis, shift_jis _2004, shift_jisx0213
Sin embargo, tengo la impresión de que se puede leer bien con shift_jis o cp932, que es una medida importante.
discusión
Lista de comentarios
cp949 es coreano, ¿no?
Utilice cp932.
引用
cp932 | 932, ms932, mskanji, ms-kanji | japonés
cp949 | 949, ms949, uhc | coreano
Gracias por tu consejo.Parece que la columna de referencia se describió erróneamente como cp949.Lo he corregido.
¡Moretón!resuelto!
Fue útil