pandasにexcel出力のcsvを読ませる時に注意する点


pythonに読ませるなら、文字形式はutf-8にして欲しいものですが、
データ出力側も色々な事情ありますから、受け側で変換して読み込まなければならないケースも多々あります。

Windows&Excelの環境で出力されるcsvは、シフトJISです。。。
ということで、pandasで、

import pandas as pd
dataset1 = pd.read_csv("hogehoge.csv",encoding="shift_jis")

とやれば、OKだなーと思って油断してると、たまにちゃんと読めないことがあります。

test.csv
山田,1000
佐藤,2000
山本,3000

これは読めますが、

test2.csv
1,山田,1000
2,髙橋,2000
3,黑﨑,3000

もれなく、下記のエラーが出ます。。。

UnicodeDecodeError: 'shift_jis' codec can't decode byte 0xfb in position 0: illegal multibyte sequence

これは、test2.csvに、
・ハシゴダカ ""
・タチサキ ""
等の、windows拡張文字列が混ざっている事に起因します。
このような文字を読むためには、文字コードをcp932としてやる必要があります。

encoding='cp932'

こういう事があるので、windowsだから、shift_jisで読んどけばOKという意識ではなく、
最初から、cp932で読むようにしておけば、無駄なトラブルに悩まされなくて良いというお話でした。

import pandas as pd
dataset1 = pd.read_csv("hogehoge.csv",encoding="cp932")

※下記サイト大変参考になりました。
「Shift_JIS と Windows-31J (MS932) の違いを整理してみよう」
http://weblabo.oscasierra.net/shift_jis-windows31j/