koji/メガネ男の日誌

日々の学び、活動状況を記録します。仕事のことは少なめ。

to_csv() で csv ファイルを書き出したらカラムが文字化けする件

f:id:kj_man666:20200403223829j:plain

pythonにてカラムが漢字のcsvファイルをDataFrame型で読み込んで加工し、csvファイルに書き出してエクセルで開いたら、カラムが文字化けしてしまったので、文字化け防止の方法をまとめます。

データは下記のものを想定します。

f:id:kj_man666:20200403224149p:plain

コードは以下のとおりです。

# ライブラリ
import pandas as pd
import os

# パスの取得
path = os.getcwd()

# DataFrame型データの作成
df = pd.DataFrame(
                {"壱":[1,2,3],
                 "弐":[10,15,20],
                 "参":[8, 6, 4]
                }
                )

# 文字化けするcsvファイルの書き出し
df.to_csv(path + "\data1.csv")

このように出力してエクセルで開くと、下記のとおりカラムが文字化けしてしまいます。

f:id:kj_man666:20200403223917p:plain

なお、メモ帳で開くと、ちゃんと漢字で表記されます。

f:id:kj_man666:20200403223909p:plain

csvファイルはエクセルで開くことが多いと思いますし、人にデータを共有するとき、「このカラムどういう意味?」と聞かれると面倒ですよね。

そういう時は、to_csv() のパラメーターに、shift-jis を指定しましょう。

shift-jis は日本語フォントの文字コードです。

ja.wikipedia.org

なお、encodingを何も設定しない場合は、自動的に "utf-8" という文字コードが設定されています。

ja.wikipedia.org

df.to_csv(path + "\data2.csv", encoding="shift-jis")

または、to_excel() 関数を使って、エクセルデータで出力する方法もあります。

この場合は、encoding="shift-jis" の指定は必要ありません。

ただし、openpyxl ライブラリをインストールする必要があります。

pip install openpyxl
df.to_excel(path + "\data3.xlsx")

出力結果 f:id:kj_man666:20200403225422p:plain

参考サイト

www.craneto.co.jp

note.nkmk.me