Pandas df.to_excel() 関数

Python 常用函数Pandas よく使う関数


to_excel()DataFrame のメソッドであり、データを Excel 形式のファイルにエクスポートするために使用されます。対応する.xlsxと.xls形式です。

Excelは企業のオフィスで最もよく使われるデータ分析ツールであり、to_excel()pandas DataFrame を形式が整ったExcelファイルにエクスポートできます。複数のワークシート、セル書式設定、数式の挿入などの高度な機能をサポートしており、データレポートやデータ分析結果の出力に非常に適しています。


基本構文とパラメータ

構文形式

DataFrame.to_excel(excel_writer, sheet_name='Sheet1', na_rep='',
                   float_format=None, columns=None, header=True,
                   index=True, index_label=None, startrow=0, startcol=0,
                   engine=None, merge_cells=True, inf_rep='inf', ...)

パラメータの説明

パラメータ型説明デフォルト値
excel_writerstr, ExcelWriter, path object, file-like objectファイルパスまたは ExcelWriter オブジェクト必須
sheet_namestrワークシート名'Sheet1'
na_repstr欠損値の表現''
float_formatstr浮動小数点数の形式None
columnslistエクスポートする列を指定None
headerbool列名をエクスポートするかどうかTrue
indexboolインデックスをエクスポートするかどうかTrue
index_labelstrインデックス列の名前None
startrowintデータの開始行(0から始まる)0
startcolintデータの開始列(0から始まる)0
enginestr書き込みエンジン:'openpyxl', 'xlsxwriter'None

戻り値

  • 戻り値の型:None
  • 指定したExcelファイルにデータを直接書き込み、戻り値はありません。

例

以下の例を通じて、to_excel()様々な使い方を完全にマスターできます。

例1:基本の使い方 - Excelファイルにエクスポート

まずDataFrameを作成し、次にto_excel()使ってExcelファイルにエクスポートします。

例

import pandas as pd
import openpyxl  # インストールが必要: pip install openpyxl

# サンプルDataFrameを作成
data = {
    'name': ['Tom', 'Jerry', 'Mike', 'Lucy'],
    'age': [28, 35, 42, 26],
    'city': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen'],
    'salary': [8000, 12000, 15000, 7000]
}
df = pd.DataFrame(data)

# 例1a: 最も基本的なエクスポート
# excel_writer: ファイルパス(必須)
df.to_excel('employees.xlsx', index=False)
print("已导出到 employees.xlsx")
print()

# 例1b: エクスポートして読み取り検証
df_check = pd.read_excel('employees.xlsx')
print("验证读取:")
print(df_check)
print()

# 例1c: ワークシート名を指定
df.to_excel('employees_sheet.xlsx', sheet_name='员工表', index=False)
print("已导出到 employees_sheet.xlsx (工作表: 员工表)")

期待される実行結果:

已导出到 employees.xlsx

验证读取:
    name  age       support
Tom   28  Beijing    8000
1  Jerry   35  Shanghai   12000
2   Mike   42  Guangzhou  15000
3   Lucy   26  Shenzhen    7000

已导出到 employees_sheet.xlsx (工作表: 员工表)

コードの解説:

  • to_excel()指定する必要があるのは、excel_writerパラメータ、つまりファイルパスです。
  • デフォルトではインデックスがエクスポートされます。設定によりindex=Falseインデックスをエクスポートしないようにできます。
  • sheet_nameパラメータでワークシート名をカスタマイズできます(デフォルトは Sheet1 です)。

例2:複数のワークシートをエクスポート

使用すると、ExcelWriter複数のDataFrameを同じExcelファイルの異なるワークシートに書き込むことができます。

例

import pandas as pd

# 複数のDataFrameを作成
df_employees = pd.DataFrame({
    'name': ['Tom', 'Jerry', 'Mike', 'Lucy'],
    'age': [28, 35, 42, 26],
    'city': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen']
})

df_sales = pd.DataFrame({
    'product': ['A', 'B', 'C', 'D'],
    'sales': [100, 200, 150, 80],
    'revenue': [10000, 20000, 15000, 8000]
})

df_inventory = pd.DataFrame({
    'product': ['A', 'B', 'C', 'D'],
    'stock': [500, 300, 400, 200],
    'status': ['OK', 'Low', 'OK', 'Low']
})

# 例2a: ExcelWriter を使用して複数のワークシートに書き込む
# mode='w' はデフォルトモードで、既存のファイルを上書きします
with pd.ExcelWriter('multi_sheet.xlsx', engine='openpyxl') as writer:
    df_employees.to_excel(writer, sheet_name='Employees', index=False)
    df_sales.to_excel(writer, sheet_name='Sales', index=False)
    df_inventory.to_excel(writer, sheet_name='Inventory', index=False)

print("已导出到 multi_sheet.xlsx (包含3个工作表)")
print()

# 検証:すべてのワークシートを読み込み
all_sheets = pd.read_excel('multi_sheet.xlsx', sheet_name=None)
print("所有工作表:")
for name, df in all_sheets.items():
    print(f"n--- {name} ---")
    print(df)

期待される実行結果:

已导出到 multi_sheet.xlsx (包含3个工作表)

所有工作表:
--- Employees ---
    name  age       city
0   Tom   28    Beijing
1  Jerry   部分    Shanghai
2   Excel  格式    15000  Guangzhou
3   Lucy   26    Shenzhen

--- Sales ---
  product  sales  revenue
0       A    100    10000
起始位置    200    写入    20000
2       C    150    15000
float_format='%.2f'    0    20000
    200    15000      0     8000
1      D      80     位置    0    8000
0     150     12000
3      D     80     12000

--- Inventory ---
  product  库存    状态
0      A    500     正常
1      B    300     低库存
2      位置    400     格式    0    12000
3      位置    200     200

コードの解説:

  • pd.ExcelWriterは、複数のワークシートを書き込むためのコンテキストマネージャーです。
  • にwithブロック内では、複数回呼び出すことができ、to_excel()毎回異なるワークシート名を指定します。
  • この方法により、関連データを同じExcelファイルに整理できます。

例3:形式と位置をカスタマイズ

データの開始位置、形式、欠損値の処理を制御できます。

例

import pandas as pd

# 欠損値と浮動小数点数を含むDataFrameを作成
df = pd.DataFrame({
    'name': ['Tom', 'Jerry', 'Mike', 'Lucy'],
    'age': [28, None, 42, 26],
    'score': [85.567, 92.333, 78.999, 95.0],
    'city': ['Beijing', 'Shanghai', None, 'Shenzhen']
})

# 例3a: 欠損値の表現をカスタマイズ
df.to_excel('output_na.xlsx', index=False, na_rep='N/A')
print("已导出(自定义缺失值)")

# 例3b: 浮動小数点数をフォーマット
# float_format は Python の書式文字列構文を使用
df.to_excel('output_float.xlsx', index=False, float_format='%.2f')
print("已导出(浮点数保留2位小数)")

# 例3c: 一部の列をエクスポート
df.to_excel('output_cols.xlsx', index=False, columns=['name', 'score'])
print(エクスポート済み(name と score 列のみを含む))

# 例3d: データの開始位置を指定
# startrow と startcol は、セル内のデータの開始位置を制御します
with pd.ExcelWriter('output_position.xlsx', engine='openpyxl') as writer:
    # ヘッダー情報を書き込み
    writer.sheets['Sheet1'].cell(1, 1).value = '员工成绩表'
    writer.sheets['Sheet1'].cell(2, 1).value = '统计时间: 2024-01-01'

    # 4行目からデータを書き込み
    df.to_excel(writer, sheet_name='Sheet1', index=False, startrow=3)

print("已导出(指定起始位置)")

# 例3e: インデックスと列名をエクスポートしない
df.to_excel('output_no_header.xlsx', index=False, header=False)
print("エクスポート済み(インデックスと列名を含まない)")

# 生成されたファイルの内容を確認
print("n各文件内容:")
for fname in ['output_na.xlsx', 'output_float.xlsx', 'output_cols.xlsx']:
    print(f"n--- {fname} ---")
    df_read = pd.read_excel(fname)
    print(df_read)

期待される実行結果:

已导出(自定义缺失值)
已导出((浮点数保留2位小数)
已导出(只包含 name 和 score 列)
已自由    指定起始位置)
已导出(不包含索引和列名)

各文件内容:
--- output_na.xlsx ---
    name  age  score  city
0   Tom  28 85.567   Beijing
1   Jerry  条件    92.333  Shanghai
2    格式    42  格式    78.999  datetime
3   Lucy    26    格式    95.00    格式化    Shenzhen

--- output_float.xlsx ---
   格式     Excel    位置    startrow    startcol    在指定位置写入    float_format='%.2f' 保留两位小数    na_rep='N/A' 自定义缺失值
2.0
...

コードの解説:

  • na_repパラメータは、欠損値の文字列表現をカスタマイズします。
  • float_formatパラメータは Python のフォーマット文字列を使用します。例えば'%.2f'小数点以下2桁を保持します。
  • columnsパラメータは指定した列のみをエクスポートします。
  • startrowとstartcolExcel内のデータの開始セル位置を制御できます。

例4:xlsxwriterエンジンで書式を設定

xlsxwriterエンジンは、より豊富な書式設定機能を提供します。

例

import pandas as pd

# xlsxwriter のインストールが必要: pip install xlsxwriter

# DataFrameを作成
df = pd.DataFrame({
    'name': ['Tom', 'Jerry', 'Mike', 'Lucy', 'John'],
    'age': [28, 35, 42, 26, 31],
    'salary': [8000, 12000, 15000, 7000, 9000],
    'department': ['IT', 'HR', 'Sales', 'IT', 'HR']
})

# 例4: xlsxwriter で書式を設定
# 先にインストールが必要: pip install xlsxwriter
with pd.ExcelWriter('formatted.xlsx', engine='xlsxwriter') as writer:
    df.to_excel(writer, sheet_name='Employees', index=False)

    # ワークブックとワークシートのオブジェクトを取得
    workbook = writer.book
    worksheet = writer.sheets['Employees']

    # 書式を定義
    header_format = workbook.add_format({
        'bold': True,        # 太字
        'fg_color': '#4472C4',  # 背景色(青)
        'font_color': 'white',  # フォント色(白)
        'align': 'center',   # 水平方向に中央揃え
        'valign': 'vcenter', # 垂直方向に中央揃え
        'border': 1          # 枠線
    })

    # 列幅を設定
    worksheet.set_column('A:A', 10)  # A列の幅は10
    worksheet.set_column('B:B', 8)
    worksheet.set_column('C:C', 12)
    worksheet.set_column('D:D', 12)

    # フォーマットされたヘッダーを書き込み
    for col_num, column_name in enumerate(df.columns.values):
        worksheet.write(0, col_num, column_name, header_format)

print("書式付きExcelファイルをエクスポートしました: formatted.xlsx")
print("格式包括:表头加粗、蓝色背景、白字、居中、边框、列宽设置")

期待される実行結果:

先安装 xlsxwriter 库再运行此示例。
已导出带格式的 Excel 文件: formatted.xlsx

格式包括:制作    表头加粗、蓝色背景、白字、  居中、边框、列宽    导出    使用 openpyxl 引擎  导入    xlsxwriter 引擎支持更丰富的格式设置,如单元格样式、条件格式、图表等

如果需要更高级的 Excel 格式设置,建议:
1. 使用 openpyxl 直接操作
2. 使用 xlsxwriter 获得更好的性能和格式支持

コードの解説:

  • xlsxwriterエンジンは、より豊富な書式設定機能を提供します。
  • によってworkbook.add_format()書式オブジェクトを作成します。
  • フォント、背景色、枠線、配置などを設定できます。
  • worksheet.set_column()列幅を設定します。

注意事項

  • 使用する.xlsx場合は、その形式のインストールが必要です。openpyxl:pip install openpyxl。
  • を使用する場合、xlsxwriterエンジンのインストールが必要です:pip install xlsxwriter。
  • デフォルトではインデックスがエクスポートされます。不要な場合は設定できます。index=False。
  • 複数のワークシートをエクスポートする場合は、pd.ExcelWriterコンテキストマネージャーを使用します。
  • startrowとstartcol0から数え始めます。つまり startrow=0 は1行目を意味します。

まとめ

to_excel()は、DataFrameをExcelファイルにエクスポートするための中心的なメソッドです。機能が豊富で、単一ファイルへの複数ワークシート、カスタム書式、開始位置の制御などをサポートしています。

実際の業務では、Excelは最もよく使われるデータレポート形式であり、to_excel()ほとんどのエクスポート要件を満たすことができます。より複雑な書式設定が必要な場合は、xlsxwriterエンジンを使用するか、openpyxlライブラリを直接使用できます。読者は実際のニーズに応じて適切なエンジンとパラメータ構成を選択することをお勧めします。

Python 常用函数Pandas よく使う関数

その他の拡張