PythonでCSV集計をしてみよう|pandasのread_csvを使ってSQL感覚で実装

SNOW

2026-04-05

この記事では、Pythonを使ってCSVデータを集計する基本的な流れを紹介します。

pandasのread_csvを使った読み込みから、SQLのような集計処理までを実務ベースで解説します。

サンプルデータを使いながら、顧客別の売上集計を実際に作っていきます。

Excel出力まで含めて、一連の流れをシンプルに理解できる構成にしています。

CSVデータの構造を確認する

まずは今回扱うCSVデータの構造を見ていきます。

請求データとして、以下のようなカラムを持っています。

  • invoice_id(請求ID)
  • customer_id(顧客ID)
  • customer_name(顧客名)
  • invoice_date(請求日)
  • amount(金額)

今回のデータ件数は10件です。

この中で顧客IDごとに集計すると、顧客は5社に分かれます。

つまり「10件 → 5件」に圧縮されるのが今回のゴールです。


pandasでCSVを読み込む

まずはCSVの読み込みです。

import pandas as pd

df = pd.read_csv("seikyu.csv", encoding="utf-8")

read_csvはpandasの中でも最も使う関数のひとつです。

実務でもログ、売上、顧客データなど、ほぼすべてここから始まります。

行数や列数を確認しておくと安心です。

print(df.shape)

今回のデータは「10行 × 12列」です。


データを集計できる形に整える

CSVはそのままだと集計できないことがあります。

特に金額は文字列として扱われているケースが多いです。

df["amount"] = df["amount"].replace(",", "", regex=True)
df["amount"] = pd.to_numeric(df["amount"], errors="coerce")

ここでやっているのは2つです。

  • カンマを除去
  • 数値型に変換

この処理を入れておかないと、合計が正しく出ません。

実務ではこの前処理が8割と言ってもいいくらい重要です。


SQL感覚で顧客別に集計する

ここが一番のポイントです。

pandasはSQLのGROUP BYとほぼ同じことができます。

summary = (
    df.groupby(["customer_id", "customer_name"], as_index=False)["amount"]
    .sum()
)

これはSQLで書くとこうなります。

SELECT customer_id, customer_name, SUM(amount)
FROM seikyu
GROUP BY customer_id, customer_name;

今回の集計結果は以下のようになります。

  • 株式会社サンプルA:約820,000円
  • 株式会社テックD:約700,000円
  • 有限会社テストB:約530,000円
  • 合同会社デモC:約225,000円
  • 株式会社イノベーションE:約50,000円

データ10件から5件に整理されました。

かなりスッキリします。


出典:Pythonプログラミング VTuber サプー