PandasでDataFrameをExcelに書き出し!to_excel()徹底活用ガイド

フリーランスボード

20万件以上の案件から、副業に最適なリモート・週3〜の案件を一括検索できるプラットフォーム。プロフィール登録でAIスカウトが自動的にマッチング案件を提案。市場統計や単価相場、エージェントの口コミも無料で閲覧可能なため、本業を続けながら効率的に高単価の副業案件を探せます。フリーランスボード

ITプロパートナーズ

週2〜3日から働ける柔軟な案件が業界トップクラスの豊富さを誇るフリーランスエージェント。エンド直契約のため高単価で、週3日稼働でも十分な報酬を得られます。リモートや時間フレキシブルな案件も多数。スタートアップ・ベンチャー中心で、トレンド技術を使った魅力的な案件が揃っています。専属エージェントが案件紹介から契約交渉までサポート。利用企業2,000社以上の実績。ITプロパートナーズ

Midworks 10,000件以上の案件を保有し、週3日〜・フルリモートなど柔軟な働き方に対応。高単価案件が豊富で、報酬保障制度(60%)や保険料負担(50%)など正社員並みの手厚い福利厚生が特徴。通勤交通費(月3万円)、スキルアップ費用(月1万円)の支給に加え、リロクラブ・freeeが無料利用可能。非公開案件80%以上、支払いサイト20日で安心して稼働できます。Midworks

データ分析で作成・加工したDataFrameの結果を、多くの人が利用するExcelファイル(.xlsx, .xls)として出力したい場面は頻繁にあります。Pandasのto_excel()メソッドを使えば、DataFrame簡単かつ柔軟にExcelファイルとして保存できます。これにより、分析結果の共有やレポート作成が格段にスムーズになります。

この記事では、to_excel()の基本的な使い方から、複数シートへの書き出し、ヘッダーやインデックスの制御、特定の列の選択、そして書式設定のヒントまでを詳しく解説します。

to_excel()の基本:DataFrameをExcelに保存 💾

to_excel()メソッドは、DataFrameの内容を指定したファイルパスにExcel形式で出力します。デフォルトでは、新しいワークブックの最初のシートにデータが書き込まれます。

最もシンプルな書き出し方

ファイルパスを指定するだけで、DataFrameがExcelファイルとして保存されます。

Python
 
import pandas as pd
import os # ファイル操作用

# サンプルDataFrameを作成
df = pd.DataFrame({
    '商品名': ['りんご', 'みかん', 'バナナ'],
    '価格': [100, 80, 120],
    '在庫数': [50, 120, 30]
})

# Excelファイルとして書き出し
output_file = 'products_report.xlsx'
df.to_excel(output_file)

print(f"'{output_file}' にDataFrameを書き出しました。")

# 不要なファイルを削除 (実行時にコメントアウトを外してください)
# os.remove(output_file)

この時、デフォルトでは行インデックス列ヘッダーも一緒に出力されます。


to_excel()の便利なオプション 🛠️

to_excel()には、出力形式を細かく制御するための様々なオプションがあります。

1. index:行インデックスの書き出し制御

デフォルトでは行インデックスも出力されますが、不要な場合はindex=Falseを指定します。

Python
 
import pandas as pd
import os

df = pd.DataFrame({
    '名前': ['Alice', 'Bob'],
    '年齢': [25, 30]
})

output_file_no_index = 'members_no_index.xlsx'
df.to_excel(output_file_no_index, index=False)

print(f"'{output_file_no_index}' にインデックスなしで書き出しました。")

# os.remove(output_file_no_index)

2. header:列ヘッダーの書き出し制御

ヘッダー行を出力したくない場合はheader=Falseを指定します。

Python
 
import pandas as pd
import os

df = pd.DataFrame({
    'A': [1, 2],
    'B': [3, 4]
})

output_file_no_header = 'data_no_header.xlsx'
df.to_excel(output_file_no_header, header=False, index=False) # インデックスも不要な場合
print(f"'{output_file_no_header}' にヘッダーなしで書き出しました。")

# os.remove(output_file_no_header)

3. sheet_name:書き出すシートの指定

デフォルトでは'Sheet1'に書き込まれますが、特定のシート名を指定することもできます。

Python
 
import pandas as pd
import os

df = pd.DataFrame({
    'Task': ['Analyze', 'Report']
})

output_file_custom_sheet = 'project_status.xlsx'
df.to_excel(output_file_custom_sheet, sheet_name='Tasks', index=False)
print(f"'{output_file_custom_sheet}' の 'Tasks' シートに書き出しました。")

# os.remove(output_file_custom_sheet)

4. 複数シートへの書き出し:ExcelWriterを使う

一つのExcelファイル内に複数のDataFrameを異なるシートとして書き出したい場合は、pd.ExcelWriterオブジェクトを使用します。

Python
 
import pandas as pd
import os

df1 = pd.DataFrame({'月': ['1月', '2月'], '売上': [100, 120]})
df2 = pd.DataFrame({'月': ['1月', '2月'], '費用': [50, 60]})

output_file_multi_sheet = 'monthly_report.xlsx'

with pd.ExcelWriter(output_file_multi_sheet) as writer:
    df1.to_excel(writer, sheet_name='売上データ', index=False)
    df2.to_excel(writer, sheet_name='費用データ', index=False)

print(f"'{output_file_multi_sheet}' に複数のシートを書き出しました。")

# os.remove(output_file_multi_sheet)

5. columns:書き出す列の指定

DataFrameの一部列だけを書き出したい場合にcolumnsオプションを使用します。

Python
 
import pandas as pd
import os

df_full = pd.DataFrame({
    'ID': [1, 2, 3],
    '名前': ['Alice', 'Bob', 'Charlie'],
    '年齢': [25, 30, 35]
})

output_file_selected_cols = 'basic_info.xlsx'
df_full.to_excel(output_file_selected_cols, columns=['ID', '名前'], index=False)
print(f"'{output_file_selected_cols}' に 'ID' と '名前' 列のみ書き出しました。")

# os.remove(output_file_selected_cols)

6. startrow / startcol:書き出し開始位置の指定

Excelシートの特定のセルから書き出しを開始したい場合に、startrow(行)とstartcol(列)オプションで位置を指定します。

Python
 
import pandas as pd
import os

df_part = pd.DataFrame({'Value': [10, 20]})

output_file_offset = 'offset_data.xlsx'
# 1行目、1列目 (B2セル) から書き出し
df_part.to_excel(output_file_offset, startrow=1, startcol=1, index=False, header=False)
print(f"'{output_file_offset}' に指定した位置から書き出しました。")

# os.remove(output_file_offset)

7. engine:使用するエンジンの指定

Excelファイルの書き出しにはopenpyxl(.xlsx形式)またはxlwt(.xls形式)などのエンジンが使われます。通常はPandasが自動で選択しますが、明示的に指定することも可能です。

Python
 
# .xlsx形式の場合 (デフォルトでopenpyxlが使われる)
# df.to_excel('output.xlsx', engine='openpyxl')

# .xls形式の場合 (xlwtが必要)
# df.to_excel('output.xls', engine='xlwt')

注: xlwtはPython 3.xではサポートが終了しており、新しいバージョンではopenpyxlが主に使われます。古い.xls形式を扱う場合は、対応するライブラリのインストールが必要になる場合があります。


まとめ

Pandasのto_excel()メソッドは、DataFrameをExcelファイルとして出力するための非常に強力で柔軟な機能を提供します。

  • 基本的な書き出し: df.to_excel('filename.xlsx')

  • インデックスやヘッダーの制御: index=False, header=False

  • 特定のシートへの書き出し: sheet_name='シート名'

  • 複数シートへの書き出し: pd.ExcelWriterを使用

  • 特定の列のみ書き出し: columns=['列名1', '列名2']

  • 書き出し開始位置の調整: startrow, startcol

これらのオプションを使いこなすことで、分析結果をExcelファイルとして自在に整形し、共有する作業が格段に効率的になるでしょう。ぜひto_excel()をマスターして、データ分析ワークフローをさらに強化してください!

フリーランスボード

20万件以上の案件から、副業に最適なリモート・週3〜の案件を一括検索できるプラットフォーム。プロフィール登録でAIスカウトが自動的にマッチング案件を提案。市場統計や単価相場、エージェントの口コミも無料で閲覧可能なため、本業を続けながら効率的に高単価の副業案件を探せます。フリーランスボード

ITプロパートナーズ

週2〜3日から働ける柔軟な案件が業界トップクラスの豊富さを誇るフリーランスエージェント。エンド直契約のため高単価で、週3日稼働でも十分な報酬を得られます。リモートや時間フレキシブルな案件も多数。スタートアップ・ベンチャー中心で、トレンド技術を使った魅力的な案件が揃っています。専属エージェントが案件紹介から契約交渉までサポート。利用企業2,000社以上の実績。ITプロパートナーズ

Midworks 10,000件以上の案件を保有し、週3日〜・フルリモートなど柔軟な働き方に対応。高単価案件が豊富で、報酬保障制度(60%)や保険料負担(50%)など正社員並みの手厚い福利厚生が特徴。通勤交通費(月3万円)、スキルアップ費用(月1万円)の支給に加え、リロクラブ・freeeが無料利用可能。非公開案件80%以上、支払いサイト20日で安心して稼働できます。Midworks