データ分析の結果をレポートとして共有する際、CSV形式ではなく、整形されたExcelファイル(.xlsx)での出力が求められるケースは多々あります。Pandasの to_excel メソッドを使用することで、DataFrameの内容をExcelファイルとして保存することができます。
本記事では、基本的な出力方法から、出力位置の調整や複数シートへの書き込みを行うための主要なパラメータについて解説します。なお、Excel出力を行うには事前に openpyxl ライブラリのインストールが必要です(pip install openpyxl)。
to_excelの主要パラメータ
to_excel メソッドには、出力形式を細かく制御するためのオプションが多数用意されています。頻繁に使用される主要なパラメータは以下の通りです。
| パラメータ | 意味・役割 |
| sheet_name | 出力先のシート名を指定します(デフォルトは ‘Sheet1’)。 |
| index | DataFrameのインデックス(行ラベル)を出力するかを指定します。False にすると行番号などを除外できます。 |
| columns | 出力する列を限定したり、順序を指定したりします。リスト形式で指定します。 |
| startrow | 書き込みを開始する行位置を指定します(0始まり)。上部に空行を作りたい場合に使用します。 |
| startcol | 書き込みを開始する列位置を指定します(0始まり)。左側に空列を作りたい場合に使用します。 |
実装サンプルコード
以下に、3つの異なるシナリオでのExcel出力コードを示します。
- 基本的な出力(シート名とインデックス制御)
- 出力位置と対象列の指定
- 複数のシートへの書き込み(ExcelWriterの使用)
import pandas as pd
import os
def export_to_excel_demo():
"""
Pandasを用いたExcelファイル出力の様々なパターンを実演する関数
"""
# サンプルデータの作成: 従業員の成績データ
employee_data = {
"Employee_ID": [101, 102, 103, 104],
"Name": ["K. Tanaka", "M. Sato", "S. Suzuki", "Y. Honda"],
"Department": ["Sales", "Engineering", "Sales", "HR"],
"Score": [85, 92, 78, 88],
"Join_Date": ["2023-04-01", "2022-10-01", "2024-01-01", "2023-06-01"]
}
df = pd.DataFrame(employee_data)
output_file_basic = "employee_report_basic.xlsx"
output_file_multi = "employee_report_multi.xlsx"
# ---------------------------------------------------------
# 1. 基本的な出力とパラメータ指定
# ---------------------------------------------------------
print(f"=== 1. 基本的なExcel出力: {output_file_basic} ===")
# index=False: 行番号を出力しない(一般的によく使われる設定)
# sheet_name: シート名を "Performance_2025" に指定
df.to_excel(
output_file_basic,
index=False,
sheet_name="Performance_2025"
)
print("保存が完了しました。\n")
# ---------------------------------------------------------
# 2. 出力位置の調整 (startrow, startcol) と列の限定 (columns)
# ---------------------------------------------------------
print("=== 2. 位置調整と列指定 ===")
# columns引数で、特定の列のみを出力(ここでは名前とスコアのみ)
# startrow=2: 上から3行目(インデックス2)から書き込み開始
# startcol=1: 左から2列目(B列、インデックス1)から書き込み開始
# ※これにより、A列や1-2行目にタイトル等を後から追記するスペースを確保できます
output_file_custom = "employee_report_custom.xlsx"
df.to_excel(
output_file_custom,
index=False,
columns=["Name", "Score"],
startrow=2,
startcol=1,
sheet_name="Summary"
)
print(f"カスタム出力が完了しました: {output_file_custom}\n")
# ---------------------------------------------------------
# 3. 複数のDataFrameを別々のシートに出力 (ExcelWriter)
# ---------------------------------------------------------
print(f"=== 3. 複数シートへの書き込み: {output_file_multi} ===")
# 部署ごとにデータを分割
df_sales = df[df["Department"] == "Sales"]
df_eng = df[df["Department"] == "Engineering"]
# 1つのExcelファイルに複数のシートを作成する場合は pd.ExcelWriter を使用する
# mode="w" は新規作成(上書き)
with pd.ExcelWriter(output_file_multi, engine="openpyxl") as writer:
# シート1: 営業部
df_sales.to_excel(writer, sheet_name="Sales_Dept", index=False)
# シート2: 技術部
df_eng.to_excel(writer, sheet_name="Engineering_Dept", index=False)
print("複数シートの保存が完了しました。")
# (参考) ファイル削除処理
# os.remove(output_file_basic)
# os.remove(output_file_custom)
# os.remove(output_file_multi)
if __name__ == "__main__":
export_to_excel_demo()
コードの解説
基本パラメータの活用
df.to_excel("filename.xlsx", index=False) は最も標準的な記述です。PandasのDataFrameはデフォルトで0から始まる行番号(インデックス)を持っていますが、ビジネスレポートとしてExcelを作成する場合、この行番号は不要なケースが多いため index=False を指定します。
位置調整(startrow, startcol)
startrow や startcol は、Excelファイルの左上(A1セル)以外からデータを書き始めたい場合に有用です。例えば、社内フォーマットが決まっており、ヘッダー部分に「作成日」や「部署名」を手動で入れたい場合、データ部分の開始位置をずらすことで対応できます。
複数シートへの出力(ExcelWriter)
通常の to_excel を単純に2回実行すると、2回目の実行でファイル自体が上書きされ、1回目の内容は消えてしまいます。
同じファイルの別のシートにデータを書き込みたい場合は、pd.ExcelWriter オブジェクトを作成し、それを to_excel の第一引数(writer)として渡す必要があります。これにより、1つのExcelブック内に複数のシートを管理することが可能になります。
