Oorzaken en oplossingen voor UnicodeDecodeError [Python]
Toen ik probeerde een dataset in csv-bestandsformaat met panda's te lezen, kwam ik onmiddellijk de foutmelding "UnicodeDecodeError: 'utf-8' codec kan byte 0x91 niet decoderen op positie 1: ongeldige startbyte". Noteer.
fout inhoud
Lees het csv-bestand met pd.read_csv.Dan ...
importeer panda's als pd df = pd.read_csv ('data.csv')
>> UnicodeDecodeFout: 'utf-8' codec kan byte 0x91 niet decoderen in positie 1: ongeldige startbyte
Ik heb een Unicode-decoderingsfout (een tekencode naar een teken geconverteerd).
Het omzetten van tekens naar tekencodes wordt overigens codering genoemd.
reden
In de personal computer worden de tekens niet herkend zoals ze zijn, maar worden ze behandeld als cijfers (tekencodes) die van tevoren aan elk teken zijn toegewezen.
Er zijn veel soorten tekencodes, afhankelijk van de taal en de manier waarop u nummers toewijst. UTF-8 is een van de coderingsmethoden voor Unicode die is ingesteld als een uniforme standaard van de wereldstandaard, zodat deze in elke taal kan worden gebruikt.
UTF-8 lijkt echter ook niet perfect te zijn (Wikipedia:Unicode-problemen in Japanse omgeving)
Ik weet niet welk teken het probleem veroorzaakte, maar aangezien het csv-bestand Japanse tekens bevatte, veroorzaakte de slechte conversie tussen de Japanse tekencode en UTF-8 de Unicode-decoderingsfout.
oplossing
Geef bij het lezen met read_csv () het coderingsformaat op van het argument tot de Japanse tekencode (shift_jis, enz.).
df = pd.read_csv ('data.csv', encoding = 'shift_jis')
Ik heb het met succes kunnen lezen.
Ander Japans compatibel coderingsformaat
Overigens zijn er meerdere tekencodes die Japans kunnen uitdrukken, en Python implementeert standaard het volgende. (Referentie:Lijst met standaard coderingen van 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
Ik heb echter de indruk dat het goed te lezen is met shift_jis of cp932, wat een grote maat is.
discussie
Lijst met opmerkingen
cp949 is Koreaans, nietwaar?
Gebruik cp932.
引用
cp932 | 932, ms932, mskanji, ms-kanji | Japans
cp949 | 949, ms949, uhc | Koreaans
Bedankt voor je advies.Het lijkt erop dat de referentiekolom ten onrechte werd beschreven als cp949.Ik heb het gecorrigeerd.
Blauwe plek!opgelost!
Het hielp