Python pandas DataFrame.to_excel()でデータフレームの内容をエクセルファイルに保存する

こんにちは、kisseです。
今までデータフレームをcsvに書き出すDataFrame.to_csv()メソッドを使っていましたが、エクセルシートに書き出すメソッドを使ってみたら便利でした。
今回はDataFrame.to_excel()の便利な点と使いかたについての記事です。



便利なところ

僕が使って、便利だなと感じた点は以下の2点でした。

  • 文字化けの心配が少ない
  • 複数のデータフレームの内容を複数のシートに分けて書き出せる

まず1点目。
to_csv()メソッドでは、文字コードを指定しない場合にはutf-8で出力がエンコーディングされます。
しかし、utf-8で出力したファイルをエクセルで開くと文字化けが起こります。
これを回避するには、文字コードをshift-jisに指定すればいいのですが、うまくエンコーディングされていなかったり、エンコーディングエラーが発生したり面倒です。
それなら、最初からエクセルで開ける形式にしておいてくれるメソッド使った方が便利ですね。

2点目について。
複数の関連するデータを扱う際に、複数のファイルに出力するよりも、1つのファイルないでシート分割した方が共有しやすかったり色々便利です。
(好みの問題かもしれないですが)
csv形式で出力した場合、シートを分割することはできませんが、エクセル形式での出力であればシートを分割して出力することができます。

使い方

以下が大まかな使用の流れです。

  1. pandas.ExcelWriterクラスのコンストラクタに保存ファイル名を指定する
  2. データフレームのto_excel()メソッドにExcelWriterインスタンスとシート名を渡す
  3. ExcelWriterインスタンスのsave()メソッドを実行し、書き出し内容を保存する
# Dataframe.to_excel()テスト
import pandas as pd

# データフレームを用意
dataframe1 = pd.DataFrame([['ほげ', 'ふが'], ['ぽげ', 'ぷが']], columns = ['columnA', 'columnB'])
dataframe2 = pd.DataFrame([[1, 2], [3, 4]], columns = ['columnA', 'columnB'])

# 出力ファイル名を指定
excel_writer = pd.ExcelWriter('output.xlsx')

# シート名を指定してデータフレームを書き出す
dataframe1.to_excel(excel_writer, 'hogefuga sheet')
dataframe2.to_excel(excel_writer, 'number sheet')

# 書き出した内容を保存する
excel_writer.save()

以上のような、日本語が含まれるようなデータフレームでもto_excel()メソッドを利用することにより、文字化けせずにエクセルで開くことができるようになります。



おわり

最初からエクセルで開くことを想定するようなファイルの場合、書き出しの段階でto_excel()を使った方が文字コード問題をはじめ、様々な問題を回避できる可能性が高いです。
今まで、to_csv()メソッドを使っていたかたはぜひ一度試してください。

最後まで読んでいただきありがとうございます!

あわせて読みたい