Pythonコードを書いている際にプログラムを実行すると「UnicodeDecodeError」が発生しました。
このようなエラーが発生する人は結構いるはず。
今回は、このエラーの対処法についてまとめました。
目次
「UnicodeDecodeError: 」エラーが発生した際の対処法まとめ
今回は以下のようなプログラムをPythonで作成しました。
プログラムの内容は、取得したデータ「file.csv」の中身のデータを置換修正し、その後、そのCSVファイルを読み込み、データをエクセルへ出力するプログラムとなります。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 | import pandas as pd import re with open ( 'file.csv' , 'r' , newline = '') as file , \ open ( 'file_out.csv' , 'w' , newline = '') as fileout: text = re.sub(r '\s* ' , ',' , file .read()) print (text, file = fileout) print ( '置換完了' ) # CSVファイルの読み込み data = pd.read_csv( 'file_out.csv' ) # Excel形式で出力 data.to_excel( 'excel-data.xlsx' , encoding = 'utf-8' ) print ( 'CSV > Excel変換完了' ) |
「UnicodeDecodeError: 」エラー内容
上記のプログラムを実行すると「UnicodeDecodeError:」が発生しました。
1 2 3 4 5 6 7 8 9 | File "pandas/_libs/parsers.pyx" , line 881 , in pandas._libs.parsers.TextReader.read File "pandas/_libs/parsers.pyx" , line 896 , in pandas._libs.parsers.TextReader._read_low_memory File "pandas/_libs/parsers.pyx" , line 973 , in pandas._libs.parsers.TextReader._read_rows File "pandas/_libs/parsers.pyx" , line 1105 , in pandas._libs.parsers.TextReader._convert_column_data File "pandas/_libs/parsers.pyx" , line 1158 , in pandas._libs.parsers.TextReader._convert_tokens File "pandas/_libs/parsers.pyx" , line 1281 , in pandas._libs.parsers.TextReader._convert_with_dtype File "pandas/_libs/parsers.pyx" , line 1297 , in pandas._libs.parsers.TextReader._string_convert File "pandas/_libs/parsers.pyx" , line 1520 , in pandas._libs.parsers._string_box_utf8 UnicodeDecodeError: 'utf-8' codec can't decode byte 0x83 in position 0 : invalid start byte |
このエラーは、’utf-8′ にデコードできないといわれ、実行が失敗しています。
原因としては、CSVファイルの読み込みが失敗しているようでした。
CSVファイルの読み込み時にエンコーディングを追加
うまくCSVが読み込めないところが原因となっているので、CSVファイルの読み込みは、「encoding=”shift-jis”」が必要になります。
以下は、csvファイルの読み込み時にエンコーディングの指定コードを追加しました。
1 | data = pd.read_csv( 'file_out.csv' , encoding = 'shift-jis' ) |
また、以下でも問題ないです。
1 | data = pd.read_csv(‘file_out.csv’, encoding = 'cp932′) |
このcp932は、MicrosoftがShift-jisを独自に拡張した文字コードとなります。
今回はこちらを使用しています。
このコードを使用すると、「Shift-jis」で書かれたプログラムをUTF−8に変換して処理をしてくれます。
なので今回のエラーに対しても最も適したコードになると思います。
CSV読み込み時にエンコードを追加したプログラム
修正したコードは以下となります。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 | import pandas as pd import re with open ( 'file.csv' , 'r' , newline = '') as file , \ open ( 'file_out.csv' , 'w' , newline = '') as fileout: text = re.sub(r '\s* ' , ',' , file .read()) print (text, file = fileout) print ( '置換完了' ) # CSVファイルの読み込み data = pd.read_csv(‘file_out.csv’, encoding = 'cp932′) # Excel形式で出力 data.to_excel( 'excel-data.xlsx' , encoding = 'utf-8' ) print ( 'CSV > Excel変換完了' ) |
これでエラーは解消されました。
該当のエラーが発生した際は参考にしてください。
ITエンジニアの開発・検証・学習としてインターネット上で専用のサーバ(VPS)を利用しましょう!
実務経験はVPSで学べます。
コメント