LoginSignup
5
5

More than 1 year has passed since last update.

1.1(1) 日本語をread_csv(encoding='shift_jis')で読み見込めない時

Posted at

日本語を含むcsvファイルを読み込む場合は、encoding='shift_jis'を指定して、pd.read_csv('data.csv', encoding='shift_jis')と書くのは定石です。
しかし、それでもエラーとなってしまう場合があります。
例えば、以下のようなcsvファイルです。

# 例1: 'shift_jis'でエラーとなる
  clm0 clm1   clm2  clm3
     1    Ⅰ  APPLE   りんご
     2    Ⅱ  apple   リンゴ
     3    Ⅲ  aPPLe   リンゴ
     4    Ⅳ  Apple   林檎

どれも日本語と英語のように見えますが、'shift_jis' ではエラーとなります。
しかし、以下は 'shift_jis' で読み込めます。

# 例2: 'shift_jis'でエラーとならない
  clm0 clm1   clm2  clm3
     1    I  APPLE   りんご
     2   II  apple   リンゴ
     3  III  aPPLe   リンゴ
     4   IV  Apple   林檎

何が違うのでしょうか?そしてどうすればいいのでしょうか?

ここでは、もとのcsvファイルを確認しても、おかしい部分が見当たらず、「何がおかしいの!(怒)」、という場面で対処する方法を説明します。上の2つの例が、大きなヒントとなります。
これを知っておくと、大きな時間短縮になります。

トピック

原因

多くの場合、ファイルの中の日本語の文字が原因です。
例えば、以下の2つの文字をご覧ください。

文字1: Ⅰ, Ⅱ, Ⅲ, Ⅳ
文字2: I, II, III, IV

文字1は日本語です。1とタイプして全角変換したものです。2,3,4も同様です。環境依存文字と出てくるのではないでしょうか。
文字2は英語です。I(英大文字のアイ)とV(英大文字のヴィ)の組み合わせです。

文字1のような日本語が含まれていると、'shift_jis'では読み込めません。
他に、①, ②, ③ (1,2,3とタイプして全角で変換)も文字1と同じ扱いで、読み込めません。

対処方法

元のファイルを見て、どう見ても日本語と英語であり、上記が原因であれば、以下で対処できます。

encoding='cp932'を指定します。

つまり、

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

と書きます。これで①,②,③といった文字も読み込み可能です。

#   clm0 clm1   clm2  clm3
#0     1    ①  APPLE   りんご
#1     2    ②  apple   リンゴ
#2     3    ③  aPPLe   リンゴ
#3     4    ④  Apple   林檎

但し、一番いいのは、'shift_jis'で読み込めないような文字は使わない(日本語変換する①やⅣなどは使わない)ことです。或るは、日本語を一切使わず英語だけにするのが一番いいです。Pythonは日本語が苦手です。

しかし、現実には、会社の共有ファイルでは、過去に作成された「見せるための」(分析のためではない)ファイルからデータを抽出する必要も多々あるでしょう。

encoding=shifut_jisでうまくいかない場合は、encoding='cp932'で対処を試みてください。

他にどんなencodingがあるか

以下のPyhonのドキュメント(英語)を調べると、日本語に関しては次のものが用意されてます。(リストをJapaneseでフィルター)
https://docs.python.org/3/library/codecs.html#standard-encodings

しかし、実際には、普通は'shift_jis'を使い、うまくいかない場合は'cp932'を試してみる、程度です。
それ以外は使いません。(少なくとも筆者は使った事がありません)

encoding_in_api_doc.png

参考ページ

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5