Causas e soluções para UnicodeDecodeError [Python]
Quando tentei ler um conjunto de dados em formato de arquivo csv com o pandas, encontrei imediatamente o erro "UnicodeDecodeError: o codec 'utf-8' não pode decodificar o byte 0x91 na posição 1: byte inicial inválido".
conteúdo de erro
Leia o arquivo csv com pd.read_csv.Então ...
importar pandas como pd df = pd.read_csv ('data.csv')
>> UnicodeDecodeError: o codec 'utf-8' não pode decodificar o byte 0x91 na posição 1: byte inicial inválido
Recebi um erro de decodificação Unicode (conversão de um código de caractere em um caractere).
A propósito, a conversão de caracteres em códigos de caracteres é chamada de codificação.
Causa
Dentro do computador pessoal, os caracteres não são reconhecidos como são, mas são tratados como números (códigos de caracteres) atribuídos a cada caractere antecipadamente.
Existem muitos tipos de códigos de caracteres, dependendo do idioma e de como atribuir números. UTF-8 é um dos métodos de codificação para Unicode definido como um padrão unificado do padrão mundial para que possa ser usado em qualquer idioma.
No entanto, o UTF-8 também não parece ser perfeito (Wikipedia:Problemas de Unicode em ambiente japonês)
Não sei o caractere que causou o problema, mas como o arquivo csv continha caracteres japoneses, a conversão deficiente entre o código de caracteres japoneses e UTF-8 causou o erro de decodificação Unicode. Parece que sim.
解決 策
Ao ler com read_csv (), especifique o formato de codificação do argumento para o código de caractere japonês (shift_jis, etc.).
df = pd.read_csv ('data.csv', encoding = 'shift_jis')
Consegui ler com sucesso.
Outro formato de codificação compatível com o japonês
A propósito, existem vários códigos de caracteres que podem expressar japonês, e Python implementa o seguinte como padrão. (Referência:Lista de codificações padrão do 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
No entanto, tenho a impressão de que pode ser lido bem com shift_jis ou cp932, que é uma medida importante.
discussão
Lista de comentários
cp949 é coreano, não é?
Use cp932.
Citar
cp932 | 932, ms932, mskanji, ms-kanji | Japonês
cp949 | 949, ms949, uhc | Coreano
Obrigado pelo seu conselho.Parece que a coluna de referência foi descrita erroneamente como cp949.Eu corrigi isso.
Hematoma!resolvido!
Foi útil