【Pandas】Excelでの集計とpandasでの集計、業務で使い分けるポイント

Pandas

こんにちは、かつコーチです。
「pandasを覚えたけれど、実務ではまだExcelの方が早い場面も多い」と感じることはないでしょうか。
この記事は上級者向けとして、Excel(関数・ピボットテーブル)とpandasを比較しながら、業務でどちらを選ぶべきかの判断軸を整理します。
pandasの基本操作は前回までの記事(PD01〜PD09)で解説済みという前提で進めます。

Excelとpandas、それぞれの強み

データ量とパフォーマンスの比較

観点Excelpandas
快適に扱えるデータ量の目安数千〜数万行程度数十万〜数百万行でも実用的
データ量が増えたときの挙動動作が重くなり、フリーズしやすいメモリが許す限り処理速度は比較的安定
複数ファイルの一括処理手作業でのコピペが必要になりがちループやconcatで自動化しやすい

数万行を超えるデータをExcelで開いて関数を大量に設定すると、再計算のたびに待ち時間が発生します。
私が以前、5万行規模の売上データをExcelのVLOOKUPで突合していたとき、1回の再計算に数十秒かかる状態になり、作業効率が著しく落ちた経験があります。
同じ処理をpandasのmergeに置き換えたところ、処理時間は1秒未満まで短縮できました。
データ量が数万行を超えてきたら、pandasへの移行を検討する明確なサインだと考えています。

再現性・自動化のしやすさの比較

観点Excelpandas
処理手順の再現性手順書やマクロがないと再現しにくいコードそのものが手順書になる
定期的な繰り返し作業毎回手作業(一部マクロで自動化可能)スクリプト実行だけで完結させやすい
処理内容のレビュー・共有操作を口頭・スクショで説明しがちコードをそのまま共有・レビューできる

「毎月同じ集計を手作業で繰り返している」という業務があれば、それはpandasによる自動化に向いているサインです。
一方で、1回限りの簡単な集計であれば、わざわざコードを書くよりExcelで済ませた方が早いこともあります。

学習コスト・チーム内での使いやすさの比較

観点Excelpandas
習得のしやすさ関数・操作を覚えれば非エンジニアでも扱えるPython・pandas特有の書き方の学習が必要
チーム内での共有しやすさ非エンジニアも含め、誰でも開いて確認できるPython環境がないと実行・確認ができない
修正のしやすさセルを直接触ってその場で修正できるコードを理解した上での修正が必要

非エンジニアのメンバーと共同で作業するケースでは、最終的な成果物はExcel形式で共有した方がコミュニケーションコストを下げられることが多いです。
「集計処理そのものはpandasで自動化し、最終的な出力だけExcel形式(to_excel)で渡す」というハイブリッドな運用が、実務では現実的な落としどころになります。

import pandas as pd

df = pd.read_csv("sales.csv")
summary = df.groupby("店舗")["売上"].sum().reset_index()

# 集計結果をExcel形式で出力し、非エンジニアのメンバーにも共有する
summary.to_excel("店舗別売上集計.xlsx", index=False)

どちらを選ぶべきか:判断フロー

以下の観点で、Excelとpandasのどちらを使うか判断すると迷いにくくなります。

  1. データ量は数万行を超えるか → 超えるならpandasを優先検討
  2. 同じ処理を定期的に繰り返すか → 繰り返すならpandasで自動化する価値が高い
  3. 複数のファイル・データソースを組み合わせる必要があるか → あるならpandasのmergeconcatが有利
  4. 共有相手が非エンジニアか、その場で自由に触ってほしいか → その場合は最終成果物をExcel形式で出力する

つまり「処理そのものの複雑さ・繰り返し頻度・データ量」はpandas向きの判断材料、「共有相手・その場での柔軟な修正のしやすさ」はExcel向きの判断材料、と整理できます。

実務でのハマりどころ:ExcelとpandasでのHz計算結果のズレ

比較検証をする際に見落としがちなのが、Excelとpandasで四捷五入の挙動が異なるという点です。

❌Before:ExcelのROUND関数の結果と、pandasのround()の結果が一致すると思い込んでダブルチェックを怠る

私が実際に、Excel側とpandas側で同じ売上データを別々に集計して結果を突き合わせたとき、末尾の数値がわずかにズレるケースに遭遇しました。
原因を調べると、ExcelのROUNDは四捨五入(0.5は必ず切り上げ)である一方、pandasのround()はPython標準の銀行丸め(0.5がちょうど偶数になるように丸める方式)を採用しているためでした。

import pandas as pd

s = pd.Series([0.5, 1.5, 2.5, 3.5])
print(s.round())
0    0.0
1    2.0
2    2.0
3    4.0
dtype: float64

Excelなら0.5→12.5→3と全て切り上がるところが、pandasでは0.5→02.5→2のように、直前の偶数に丸められています。

✅After:金額など丸め方が結果に影響する項目は、decimalモジュールや独自の四捨五入関数を使い、Excel側の挙動に合わせる

import decimal

def round_half_up(value, digits=0):
    d = decimal.Decimal(str(value))
    return float(d.quantize(
        decimal.Decimal("1e-{}".format(digits)),
        rounding=decimal.ROUND_HALF_UP
    ))

print(round_half_up(2.5))  # 3.0

社内でExcelとpandasの集計結果を突き合わせて検証する場面では、この丸め方の違いを知らないと「原因不明の数円のズレ」に長時間悩まされることになります。
金額を扱う集計では、丸め方の仕様を最初にすり合わせておくことを強くおすすめします。

まとめ

この記事のポイント

  • データ量が数万行を超える、または処理を定期的に繰り返すなら、pandasによる自動化が有利
  • 非エンジニアとの共有や、その場での柔軟な修正が必要な場面ではExcelが依然として強い
  • 「集計処理はpandas、最終共有はExcel(to_excel)」というハイブリッド運用が実務的
  • ExcelのROUNDとpandasのround()は丸め方(四捨五入 vs 銀行丸め)が異なるため、金額の突合時は要注意

次に読むべき記事

pandas 10記事シリーズ(PD01〜PD10)はこの記事で完結です。
「読み込み→抽出→加工→集計→可視化→実践」という一連の流れを振り返りたい場合は、最初の記事「pandasとは?Pythonのデータ分析ライブラリを初心者向けに解説」から読み返してみることをおすすめします。
また、CSV・Excelファイルの自動化についてさらに深掘りしたい方は、Python基礎編のcsvモジュール・openpyxlに関する記事もあわせてご覧ください。

タグ: Pandas, 上級者向け, 比較検証

タイトルとURLをコピーしました