Python | 標準ライブラリ(pathlib + csv + collections)だけ を使って「複数のCSVを結合して集計」する実践例

Python
スポンサーリンク

ここでは 標準ライブラリ(pathlib + csv + collections)だけ を使って「複数のCSVを結合して集計」する実践例を紹介します。


想定するデータ

例えば、sales_jan.csvsales_feb.csv があり、どちらも同じ形式で「商品名, 数量, 金額」が入っているとします。

sales_jan.csv

商品,数量,金額
りんご,10,3000
みかん,5,2000
バナナ,8,2400

sales_feb.csv

商品,数量,金額
りんご,7,2100
みかん,12,4800
バナナ,4,1200

コード例:複数CSVを結合して集計

import csv
from pathlib import Path
from collections import defaultdict

# CSVファイルが入っているフォルダ
data_dir = Path.home() / "Documents" / "sales_data"

# 商品ごとの集計用辞書
summary = defaultdict(lambda: {"数量": 0, "金額": 0})

# フォルダ内のCSVをすべて処理
for csv_file in data_dir.glob("*.csv"):
    with csv_file.open("r", encoding="utf-8") as f:
        reader = csv.DictReader(f)
        for row in reader:
            product = row["商品"]
            qty = int(row["数量"])
            price = int(row["金額"])
            summary[product]["数量"] += qty
            summary[product]["金額"] += price

# 集計結果を表示
for product, data in summary.items():
    print(f"{product}: 数量={data['数量']}, 金額={data['金額']}")
Python

出力例

りんご: 数量=17, 金額=5100
みかん: 数量=17, 金額=6800
バナナ: 数量=12, 金額=3600

応用例1: 集計結果を新しいCSVに保存

output_path = data_dir / "summary.csv"

with output_path.open("w", newline="", encoding="utf-8") as f:
    writer = csv.writer(f)
    writer.writerow(["商品", "数量合計", "金額合計"])
    for product, data in summary.items():
        writer.writerow([product, data["数量"], data["金額"]])

print("集計結果を保存しました:", output_path)
Python

応用例2: 月ごとの売上推移を作る

  • ファイル名に sales_YYYYMM.csv のように月が入っている場合、
    defaultdict(dict) を使って「月ごと × 商品ごと」の表を作ることも可能です。

まとめ

  • pathlib で複数CSVを一括取得
  • csv.DictReader でヘッダー付きCSVを読み込み
  • defaultdict で合計を簡単に集計
  • 結果を新しいCSVに保存してレポート化も可能

👉 次のステップとしては、「月ごとの売上推移を表形式にまとめる」か、「商品ごとにランキングを出す」のどちらかをやってみると、さらに実務的になります。

Python
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました