- DataFrameからExcelへの書き出し方
目次
to_excel
- 単体のシートの書き出しで利用
- 複数シートの書き出しは ExcelWriter経由となる

参考
- freeze_panes=(1,1)タプルで、行1列1を固定にする
- float_formatはあるが、date_formatはない(ExcelWriterにはある)
基本(単一シート)
# 基本
df1 = pd.DataFrame([['a','b'],['c','d']],
index=['row_1','row_2'],
columns=['col_1','col_2'])
df1.to_excel('output.xlsx')
シート名を指定する
# シート名を指定する
df1.to_excel('output2.xlsx',
sheet_name='指定したシート名です')
セルを指定する
# セルを指定して書き込む(2,2だと3,3から書き込む)
df1.to_excel('output2_2.xlsx',
startrow=2,
startcol=2)
ウィンドウ枠を固定する
# ウィンドウ枠の固定もできる
df1.to_excel('output2_3.xlsx',
freeze_panes=(1,1))
with pd.ExcelWriter(path) as writer:
- 複数シートの書き出しで利用

参考
- freeze_panes=(1,1)タプルで、行1列1を固定にする
- float_formatはあるが、date_formatはない(ExcelWriterにはある)
基本(複数シート書き出し)
# ワークブックの複数のシートに書き込みたい場合は、ExcelWriterオブジェクトを経由する
df2 = df1.copy()
with pd.ExcelWriter('output3.xlsx') as writer:
df1.to_excel(writer, sheet_name='Name1')
df2.to_excel(writer, sheet_name='Name2')
既存ファイルにシート追加し書き出す
# ExcelWriter経由で、既存のExcelファイルに追加もできる
with pd.ExcelWriter('output3.xlsx',
mode='a') as writer:
df1.to_excel(writer, sheet_name='Name3')
既存の同名シートへ書き出す
同名シートだとValueError
# すでに存在するシートに書き込む場合
# if_sheet_exists='error | new | replace | ovelay', default 'error'
# error: ValueErrorを発生させる(デフォルト)
# new: エンジンによって決定された名前で新しいシートを作成する
# replace: 書き込む前にシートの内容を削除する
# ovelay: 古い内容を削除せず、既存のシートに内容を書き込む
# 既存のName3シートに書き込むと、ValueErrorになる(デフォルト)
with pd.ExcelWriter(
'output3.xlsx',
mode='a'
) as writer:
df1.to_excel(writer, sheet_name='Name3') 
同名シートを上書きする
# 既存のシートを上書きする
df3 = pd.DataFrame(
dict(
A=[2,4,6],
B=[1,2,3],
C=[3,6,9],
), index=['ONE','TWO','THREE'])
with pd.ExcelWriter(
'output3.xlsx',
mode='a',
if_sheet_exists='replace'
) as writer:
df3.to_excel(writer, sheet_name='Name3')
日付や日時形式を指定する
- できなかった。。
# 日付や日時形式を指定する
# 結果、同じ「YYYY-MM-DD HH:MM:SS」でしか表示されなかった。
from datetime import date, datetime
df = pd.DataFrame(
[
[date(2014, 1, 31), date(1999, 9, 24)],
[datetime(1998, 5, 26, 23, 33, 4), datetime(2014, 2, 28, 13, 5, 13)],
],
index=['Date', 'Datetime'],
columns=['X', 'Y']
)
# 指定なし
with pd.ExcelWriter(
'output4_noformat.xlsx'
) as writer:
df.to_excel(writer)
# 指定あり
with pd.ExcelWriter(
'output4_formated.xlsx',
date_format='YYYY/MM/DD',
datetime_format='HH:MM:SS'
) as writer:
df.to_excel(writer)