1. はじめに
業務でよく使うエクセルファイルを、Pythonの人気ライブラリ pandas で扱う方法を紹介します。
この記事では 「複数のエクセルファイルを読み込んでまとめる」 ところまでをシンプルに体験します。
実行環境は Google Colab、サンプルファイルもコードで自動生成するので事前準備は不要です。必要なものは Googleアカウント だけです。
ゴールは以下の通りです:
- コードで書いたデータをエクセルファイル(*.xlsx)として作成する
- 複数ファイルを結合して1つにまとめる
- 簡単な集計をする
- 結果をエクセルファイルに書き出す
2. 実行環境
- Google Colab
- pandasとopenpyxlモジュールが必要ですが、Colabならインストール済みですぐ使えます
3. Colabで試す方法
- Googleアカウントで Google Colab を開く
- [ノートブックを新規作成] をクリック
- 記事内のコードをセルごとにコピーして実行していきます
4. サンプルのエクセルファイルを作成する
まずはエクセルファイルを3つ、以下のコードで自動的に作成します。
import pandas as pd
from pathlib import Path
# 保存先フォルダを作成
sample_dir = Path("/content/excel_sample") # /content はGoogle Colab専用の仮想環境上のディレクトリ
sample_dir.mkdir(exist_ok=True)
# 1月のデータ
data_jan = [
{"日付": "2025-01-05", "部署": "営業一課", "担当者": "田中", "売上金額": 120000},
{"日付": "2025-01-12", "部署": "営業二課", "担当者": "佐藤", "売上金額": 80000},
]
pd.DataFrame(data_jan).to_excel(sample_dir / "sales_2025_01.xlsx", index=False)
# 2月のデータ
data_feb = [
{"日付": "2025-02-03", "部署": "営業二課", "担当者": "佐藤", "売上金額": 110000},
{"日付": "2025-02-14", "部署": "営業一課", "担当者": "田中", "売上金額": 135000},
]
pd.DataFrame(data_feb).to_excel(sample_dir / "sales_2025_02.xlsx", index=False)
# 3月のデータ
data_mar = [
{"日付": "2025-03-02", "部署": "営業三課", "担当者": "高橋", "売上金額": 99000},
{"日付": "2025-03-10", "部署": "営業二課", "担当者": "佐藤", "売上金額": 123000},
]
pd.DataFrame(data_mar).to_excel(sample_dir / "sales_2025_03.xlsx", index=False)
print("サンプルのエクセルファイルを3つ作成しました:")
for p in sorted(sample_dir.glob("*.xlsx")):
print(str(p))
出力結果
サンプルのエクセルファイルを3つ作成しました:
/content/excel_sample/sales_2025_01.xlsx
/content/excel_sample/sales_2025_02.xlsx
/content/excel_sample/sales_2025_03.xlsx
このコードでは、大まかに次の流れで処理しています。
- 保存先のフォルダを作成する
- 各月の売上データをリスト+辞書形式で定義する
- pandasのDataFrameに変換する
- DataFrameをエクセルファイル(.xlsx)として保存する
- 最後に作成されたファイル一覧を出力する
それでは、生成されたエクセルファイルを確認してみましょう。
Colab左側のファイルブラウザから /content/excel_sample
フォルダを開くと、3つのエクセルファイルが作成されていることが確認できます。
それぞれのエクセルファイルをローカルにダウンロードし、Excelで開いてみてください。下図の状態になっていることを確認できると思います。
次からはこれらのエクセルファイルに対して操作を行っていきます。
5. 複数のファイルを結合する
作成したエクセルファイルをすべて読み込み、1つのデータフレームにまとめます。
import glob
# エクセルファイルをすべて取得
files = glob.glob(str(sample_dir / "sales_2025_*.xlsx"))
print("読み込むファイル:", files)
print("\n")
# 複数のエクセルファイルをpandasのDataFrameとしてリストに読み込む
dfs = [pd.read_excel(f) for f in files]
# リストに入ったDataFrame(dfs)を縦連結して1つにする
merged = pd.concat(dfs, ignore_index=True)
# 結合後の中身を確認
print(merged)
出力結果
読み込むファイル: ['/content/excel_sample/sales_2025_01.xlsx', '/content/excel_sample/sales_2025_03.xlsx', '/content/excel_sample/sales_2025_02.xlsx']
日付 部署 担当者 売上金額
0 2025-01-05 営業一課 田中 120000
1 2025-01-12 営業二課 佐藤 80000
2 2025-03-02 営業三課 高橋 99000
3 2025-03-10 営業二課 佐藤 123000
4 2025-02-03 営業二課 佐藤 110000
5 2025-02-14 営業一課 田中 135000
これで3つのエクセルファイルが1つにまとまりました。
6. 集計をする
部署ごとの売上合計を集計してみます。
# 並べたい順序リストを定義
order = ["営業一課", "営業二課", "営業三課"]
# 部署ごとにグループ化し、売上金額を合計
summary = (
merged.groupby("部署")["売上金額"].sum().reset_index()
)
# categories=order で並び順を明示、ordered=True でその順序に意味があることを宣言
summary["部署"] = pd.Categorical(summary["部署"], categories=order, ordered=True)
# 指定したカテゴリ順でソート
summary = summary.sort_values("部署").reset_index(drop=True)
print(summary)
出力結果
部署 売上金額
0 営業一課 255000
1 営業二課 313000
2 営業三課 99000
それぞれの部署ごとに売上金額が集計されています。
ポイント:
ここで列「部署」をカテゴリ型(Categorical)に変換しているのは理由があります。
デフォルトの文字列ソートは Unicode の辞書順で行われ、漢数字のコードポイント順が「一(4E00) < 三(4E09) < 二(4E8C)」となっているため、順序を定義しないと「営業一課 → 営業三課 → 営業二課」の並びになってしまいます。
カテゴリ型で順序を与えることで、この挙動を上書きし、意図した「営業一課 → 営業二課 → 営業三課」の順に並べることができます。
7. 結果を書き出す
結合データと集計結果をエクセルファイルに保存します。
# pandasのExcelWriterを使って複数シートに書き出す
with pd.ExcelWriter("/content/merged_sales.xlsx") as writer:
# すべてのデータを「all_data」シートへ
merged.to_excel(writer, index=False, sheet_name="all_data")
# 部署ごとの合計を「summary」シートへ
summary.to_excel(writer, index=False, sheet_name="summary")
print("エクセルファイルを作成しました: merged_sales.xlsx")
出力結果
エクセルファイルを作成しました: merged_sales.xlsx
補足:
pd.ExcelWriter
は、複数のシートをまとめて1つのエクセルファイルに出力するときに使います。
Colab左側のファイルブラウザからmerged_sales.xlsx
をダウンロードして中身を確認してみてください。
エクセルで開くと、以下のように2つのシートが作成されていることが確認できます。
8. まとめ
この記事では、pandasを使ってエクセルファイルを処理する基本的な流れを体験しました。
- サンプルデータを自動生成して準備の手間を省いた
- 複数ファイルを結合して1つのデータフレームにまとめた
- 部署ごとの売上を集計する方法を学んだ
- 複数シートのExcelに出力して成果物を確認した
ここまでできれば「エクセル作業をPythonに置き換える第一歩」はクリアです。
次のステップ例
- 月ごとに売上を集計する(ピボットテーブルのような処理)
- グラフを作成して可視化する
- 複数シートを持つExcelを処理する
pandasの強みは、これらをほんの数行のコードで実現できる点にあります。
まずは今回のサンプルを動かして感覚をつかみ、少しずつ応用を試してみてください。