Pandasで複数のデータフレームを同一のエクセルファイルの別シートに出力したいときは、with構文とPandas.ExcelWriterメソッドを組み合わせることで解決します。
本記事の内容はGoogle Colaboratory環境下で検証しています。
with構文を使って複数データフレームを別シートに出力する方法
今回はIrisデータセットを例に紹介します。
import pandas as pd
import seaborn as sns
df = sns.load_dataset('iris')
こちらのデータフレームを’species’列の要素ごとに別々シートに分けた状態でひとつのエクセルに出力するコードは以下になります。
species = df['species'].unique() # 'species'列からユニーク値をarrayとして取得
with pd.ExcelWriter('iris.xlsx', mode='x') as writer: # ExcelWriterをwith構文で開く
for specie in species: # ユニーク値ごとにループ
df[df['species']==specie].to_excel(writer, sheet_name=specie, index=False)
上記のコードではExcelWriterの引数にmode=’x’を指定してあり、同一ファイルがすでに存在する場合はFile existsエラーが発生し、不本意な上書きを防げます。mode引数を指定しない(つまりデフォルトでは)、すでにファイルが存在する場合は上書き保存になるので注意が必要です。
また、すでに存在するファイルにシートを追加する形で出力する際は、ExcelWriterの引数にmode=’a’を指定してください。
# すべてのデータを出力
df.to_excel('exsiting_file.xlsx', sheet_name='all_data', index=False)
# 既存ファイルにシートを増やす形式で種ごとに出力
with pd.ExcelWriter('exsiting_file.xlsx', mode='a') as writer:
for specie in species:
df[df['species']==specie].to_excel(writer, sheet_name=specie, index=False)
私の周囲はデータサイエンスに明るくないゴリゴリのウェット専門家が中心です。大規模データに慣れていない人にはデータ量を絞った方が喜ばれる傾向にあるので、データ共有する際は全データのシートを添えつつも各々が一番見たそうなデータに絞るようにしています。
with構文を使ったファイルの読み込みや書き込みについては別記事で紹介予定です。
コメント