Cause e rimedi per UnicodeDecodeError [Python]

2019 年 6 月 5 日

Quando ho provato a leggere un set di dati in formato file csv con i panda, ho subito riscontrato l'errore "UnicodeDecodeError: il codec 'utf-8' non può decodificare il byte 0x91 in posizione 1: byte iniziale non valido". Prendi nota.

contenuto dell'errore

Leggi il file csv con pd.read_csv.Poi ...

importa i panda come pd df = pd.read_csv ('data.csv')

>> Errore UnicodeDecode: il codec "utf-8" non può decodificare il byte 0x91 nella posizione 1: byte iniziale non valido

Ho ricevuto un errore di decodifica Unicode (conversione di un codice carattere in un carattere).
A proposito, la conversione dei caratteri in codici di caratteri è chiamata codifica.

ragione

All'interno del personal computer i caratteri non vengono riconosciuti così come sono, ma vengono trattati come numeri (codici carattere) assegnati anticipatamente a ciascun carattere.

Esistono molti tipi di codici di caratteri a seconda della lingua e di come assegnare i numeri. UTF-8 è uno dei metodi di codifica per Unicode impostato come standard unificato dello standard mondiale in modo che possa essere utilizzato in qualsiasi lingua.
Tuttavia, anche UTF-8 non sembra essere perfetto (Wikipedia:Problemi Unicode in ambiente giapponese)

Non conosco il carattere che ha causato il problema, ma poiché il file csv conteneva caratteri giapponesi, la scarsa conversione tra il codice dei caratteri giapponesi e UTF-8 ha causato l'errore di decodifica Unicode.

解決 策

Quando si legge con read_csv (), specificare il formato di codifica dall'argomento al codice del carattere giapponese (shift_jis, ecc.).

df = pd.read_csv ('data.csv', encoding = 'shift_jis')

Adesso si carica bene.

Altri formati di codifiche compatibili con il giapponese

A proposito, ci sono più codici di caratteri che possono esprimere il giapponese e Python implementa quanto segue come standard. (Riferimento:Elenco delle codifiche standard 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

Tuttavia, ho l'impressione che possa essere letto bene con shift_jis o cp932, che è una misura importante.