IT業務効率化

pandasのデータをエクセルのシート毎に分けて入れる

pandasのDataFrameを複数シートに

DataFrame.to_excelだけでは対応できない?

pandasのDataFrameをシート毎に分けてエクセルに保存していきたいのにどうやったらいいかわからない!という人のための記事です。

openpyxlを使う方法もありますが、私は次に絶対くると思っているPyExcelerateを利用します。

PyExcelerate 使ってみた
Python to excelを高速化するPyExcelerateを使ってみたはじめに 普段Pythonで大量データをエクセルに出力するシステムを扱っています。 しかしデータが大きいと中々時間が掛かってしま...

ゴールのイメージ

pandasのDataFrameを複数シートに複数のDataFrameをシート毎に出力する

コード

重要なのは最後の4行です。

import pandas as pd
from pyexcelerate import Workbook

sheet_A_df = pd.read_csv("sheet_A.csv")
sheet_B_df = pd.read_csv("sheet_B.csv")

wb = Workbook()
wb.new_sheet("sheet_A", data=sheet_A_df.values.tolist())
wb.new_sheet("sheet_B", data=sheet_B_df.values.tolist())
wb.save("sample.xlsx")
これで完成です

解説

シート化する2つのデータフレーム

この2つのDataFrameを今回例として使っています。

wb = Workbook()

これでエクセルファイルをオブジェクトとして扱えるようになりました。

wb.new_sheet("sheet_A", data=sheet_A_df.values.tolist())

ここがちょっとポイントです。

DataFrame.values.tolist()でデータフレームを多次元配列のリスト型に変換しています。そうしないと、pyexcelerateのWorkbook.new_sheetには読み込めないからです。

一度リストに変換して面倒な手間を増やしているように感じるかもしれませんが、その手間を考えてもpyexcelerateはopenpyxlよりも早いのでやる価値があります。(少なくともpyexcelerate==0.8.0、openpyxl==2.6.2においては)

またpandasのDataFrame.to_excelは内部的にopenpyxlを利用しているので同じことです。

高速化のためにDataFrameに一手間加えてpyexcelerateを利用している。

wb.save("sample.xlsx")

最後はシンプルに保存しているだけです。

PyExcelerate
Pythonでエクセルファイルを綺麗に整形する【PyExcelerate】行に色をつけたり、セルのサイズを調整したり エクセルファイルにデータをこぴぺして、幅を調整して色をつけて提出する。 多部...

セルの幅や色の調整はこちら!

ABOUT ME
hirayuki
今年で社会人3年目になります。 日々体当たりで仕事を覚えています。 テーマはIT・教育です。 少しでも技術に親しんでもらえるよう、noteで4コマ漫画も書いています。 https://note.mu/hirayuki