Pythonで計算結果をExcelシートに書き込む方法：openpyxlとpandasを使用した解説

# Pythonで計算結果をExcelシートに書き込む方法：`openpyxl`と`pandas`を使用した解説

## はじめに

データ解析を行った後、その結果をExcelファイルに保存することはよくあります。この記事では、Pythonの`openpyxl`と`pandas`ライブラリを使用して、計算結果を新しいExcelシートに書き込む方法を詳しく解説します。以下のコードブロックは、解析結果をExcelシートに書き込む一連の処理を行っています。

---

## Excelシートへの書き込み処理の流れ

次のコードブロックは、解析結果を新しいExcelシートに保存し、処理完了のメッセージを表示する部分です。

```python
ws = wb.create_sheet(title=sheet_name)
for row in dataframe_to_rows(result_df, index=False, header=True):
    ws.append(row)
print(f"{sheet_name} の修正後の差の割合をExcelに書き込みました。")
```

---

## 1. 新しいExcelシートの作成

### コード例

```python
ws = wb.create_sheet(title=sheet_name)
```

### 説明

- **`wb.create_sheet()`**：
  - `openpyxl`ライブラリのメソッドで、新しいシートを作成します。
  - `wb`は、Excelワークブックオブジェクトです。事前に`Workbook()`で作成されているか、既存のExcelファイルを読み込んだオブジェクトです。
  
- **`title=sheet_name`**：
  - 新しいシートの名前を設定します。ここでは、現在処理中のシート名（`sheet_name`）を使用しています。
  - シート名は一意でなければならないため、重複しないよう注意が必要です。

- **`ws`**：
  - 作成された新しいワークシートオブジェクトで、このシートにデータを書き込みます。

### 使用例

```python
wb = Workbook()
ws = wb.create_sheet(title="Analysis Results")
```

**出力例（Excelファイル内のシート構成）：**
- Sheet1（既定のシート）
- Analysis Results（新しく作成されたシート）

---

## 2. DataFrameのデータをExcelシートに書き込む

次に、`pandas`のDataFrameからデータをExcelシートに書き込みます。

### コード例

```python
for row in dataframe_to_rows(result_df, index=False, header=True):
    ws.append(row)
```

### 説明

- **`dataframe_to_rows()`**：
  - `pandas`ライブラリの関数で、DataFrameをExcelの行形式に変換します。
  - `result_df`は、解析結果が格納されたDataFrameです。

- **`index=False`**：
  - DataFrameのインデックスをExcelに書き込まないように指定します。
  - 通常、インデックスは解析には不要な場合が多いため、省略することが一般的です。

- **`header=True`**：
  - DataFrameの列名をExcelのヘッダーとして書き込むように指定します。
  - これにより、Excelシートの1行目に列名が表示されます。

- **`ws.append(row)`**：
  - DataFrameの各行をExcelシートに追加します。

### 使用例

```python
import pandas as pd
from openpyxl import Workbook
from openpyxl.utils.dataframe import dataframe_to_rows

# DataFrameの作成
result_df = pd.DataFrame({
    'Wavelength (nm)': [400, 500, 600],
    'Normalized Spectrum 12/7': [10, 20, 30],
    'Normalized Spectrum 12/8': [12, 19, 27],
    'Difference Ratio (%)': [18.18, 5.13, 10.53]
})

# 新しいExcelワークブックとシートの作成
wb = Workbook()
ws = wb.create_sheet(title="Results")

# DataFrameのデータを書き込み
for row in dataframe_to_rows(result_df, index=False, header=True):
    ws.append(row)

# Excelファイルの保存
wb.save("analysis_results.xlsx")
```

**Excelファイルの例：**
| Wavelength (nm) | Normalized Spectrum 12/7 | Normalized Spectrum 12/8 | Difference Ratio (%) |
|-----------------|--------------------------|--------------------------|----------------------|
| 400             | 10                       | 12                       | 18.18                |
| 500             | 20                       | 19                       | 5.13                 |
| 600             | 30                       | 27                       | 10.53                |

---

## 3. 処理完了メッセージの表示

### コード例

```python
print(f"{sheet_name} の修正後の差の割合をExcelに書き込みました。")
```

### 説明

- **`print()`**：
  - Pythonの組み込み関数で、指定されたメッセージをコンソールに表示します。

- **f-string**：
  - フォーマット済み文字列で、`{}`内に変数を埋め込むことができます。
  - ここでは、現在処理中のシート名（`sheet_name`）が表示されます。

### 出力例

```
Sheet1 の修正後の差の割合をExcelに書き込みました。
```

### 初心者へのポイント

データ処理が完了したことを示すメッセージを表示することで、長時間の処理中でも進捗を把握できます。

---

## このコードの重要性

1. **構造化されたデータ保存**：
   - `result_df`のデータがExcelシートに書き込まれることで、解析結果がわかりやすく整理されます。
   - データの再利用やレポート作成が容易になります。

2. **動的なシート名**：
   - シート名を動的に設定することで、同じExcelファイルに複数の解析結果を保存できます。
   - 各シートに異なるデータを格納することで、データの整理が簡単になります。

3. **進捗の可視化**：
   - 処理が完了するたびにメッセージを表示することで、ユーザーは処理の進行状況を把握できます。

---

## 注意点

1. **既存のシート名と重複しないように注意**：
   - `create_sheet()`で指定するシート名が既存のシート名と重複するとエラーが発生します。必要に応じて、一意のシート名を生成する工夫が必要です。

2. **大量のデータに注意**：
   - 大規模なデータセットの場合、メモリ使用量が増加する可能性があります。その場合は、分割して書き込むか、メモリ効率の良い方法を検討してください。

3. **Excelファイルの保存**：
   - `wb.save("ファイル名.xlsx")`でExcelファイルを保存する際、ファイルが開いていると保存に失敗することがあります。事前にファイルが閉じていることを確認してください。

---

## まとめ

この記事では、PandasのDataFrameからExcelシートにデータを書き込む方法について詳しく解説しました。以下のポイントを学びました：

- `wb.create_sheet()`を使用して、新しいExcelシートを作成する方法
- `dataframe_to_rows()`を使用して、DataFrameのデータをExcelシートに書き込む方法
- f-stringを使用した進捗メッセージの表示

これらの手法を使用することで、データ解析の結果をExcelファイルに自動的に保存でき、後続の分析や報告書作成がスムーズになります。次は、この記事を参考に、自分のデータをExcelに保存する練習をしてみましょう。

---

## 参考文献

1. [Pandas公式ドキュメント: DataFrame](https://pandas.pydata.org/docs/reference/frame.html)
2. [OpenPyXL公式ドキュメント: create_sheet](https://openpyxl.readthedocs.io/en/stable/api/openpyxl.workbook.workbook.html#openpyxl.workbook.workbook.Workbook.create_sheet)
3. [W3Schools: Python File Handling](https://www.w3schools.com/python/python_file_handling.asp)

この記事が、PythonでのExcelファイル操作に役立つことを願っています。