to_excel と ExcelWriter

投稿者: | 2023-01-07
  • 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)