はじめに
「売上CSVを集計したいけど、Excelでやると毎回手作業で面倒」
「Pythonでデータ分析を始めたいけど、何から手を付ければ…」
そんな方向けに、pandasを使ったCSVデータの集計の基本を解説します。読み込み・絞り込み・集計・並べ替えという、実務で最もよく使う操作に絞りました。
コピペで動くコードばかりなので、手元のCSVで試しながら読んでみてください。
準備
pip install pandas
以下のようなサンプルCSV(sales.csv)を想定します。
日付,商品名,カテゴリ,数量,売上金額
2025-04-01,りんご,果物,10,1500
2025-04-01,牛乳,飲料,5,900
2025-04-02,りんご,果物,8,1200
2025-04-02,パン,食品,12,2400
2025-04-03,牛乳,飲料,7,1260
① CSVを読み込む
import pandas as pd
# CSVを読み込む
df = pd.read_csv('sales.csv')
# 先頭5行を表示
print(df.head())
# 基本情報(行数・列数・型)
print(df.info())
# 数値列の統計サマリー
print(df.describe())
df は DataFrame(データフレーム)と呼ばれる表形式のデータです。Excelのシートをそのままプログラムで扱えるイメージです。
日本語や文字コードでエラーが出る場合
# Windowsで作ったCSVはshift_jisのことが多い
df = pd.read_csv('sales.csv', encoding='shift_jis')
② データを絞り込む(フィルタ)
# 「果物」カテゴリだけ抽出
fruits = df[df['カテゴリ'] == '果物']
# 売上金額が1000以上の行だけ
high = df[df['売上金額'] >= 1000]
# 複数条件(AND):果物 かつ 数量10以上
result = df[(df['カテゴリ'] == '果物') & (df['数量'] >= 10)]
# 複数条件(OR):果物 または 飲料
result = df[(df['カテゴリ'] == '果物') | (df['カテゴリ'] == '飲料')]
複数条件では各条件を
()で囲み、&(かつ)|(または)でつなぎます。Pythonのand/orは使えないので注意。
③ 集計する(groupby)
データ分析の核心が groupby です。「〇〇ごとに合計・平均を出す」という操作を1行で書けます。
# カテゴリごとの売上合計
category_sales = df.groupby('カテゴリ')['売上金額'].sum()
print(category_sales)
# カテゴリ
# 果物 2700
# 食品 2400
# 飲料 2160
# 商品ごとの売上合計
product_sales = df.groupby('商品名')['売上金額'].sum()
# 日付ごとの売上合計(日次推移)
daily_sales = df.groupby('日付')['売上金額'].sum()
複数の集計を一度に行う
# カテゴリごとに「合計・平均・件数」をまとめて計算
summary = df.groupby('カテゴリ').agg(
売上合計=('売上金額', 'sum'),
平均単価=('売上金額', 'mean'),
取引件数=('売上金額', 'count'),
)
print(summary)
agg() を使うと、1つのグループに対して複数の集計を同時に出せます。実務のレポート作成で頻出のパターンです。
④ 並べ替える(sort)
# 売上金額の高い順に並べる
df_sorted = df.sort_values('売上金額', ascending=False)
# 集計結果を降順に並べる(売上ランキング)
ranking = df.groupby('商品名')['売上金額'].sum().sort_values(ascending=False)
print(ranking)
# 商品名
# パン 2400
# りんご 2700 ← ※合計されるのでこうなる
# 牛乳 2160
⑤ 新しい列を追加する
# 単価を計算した列を追加
df['単価'] = df['売上金額'] / df['数量']
# 条件によって値を振り分ける列
df['高額フラグ'] = df['売上金額'].apply(lambda x: '高' if x >= 2000 else '通常')
⑥ 結果をCSV・Excelに出力する
# CSVに保存
summary.to_csv('summary.csv', encoding='utf-8-sig') # Excelで開くなら utf-8-sig
# Excelに保存(openpyxlが必要: pip install openpyxl)
summary.to_excel('summary.xlsx')
utf-8-sigで保存すると、ExcelでCSVを開いたときに文字化けしません。地味に重要なテクニックです。
実用例:月次売上レポートを自動生成する
import pandas as pd
df = pd.read_csv('sales.csv')
# 日付を日付型に変換して「年月」列を作る
df['日付'] = pd.to_datetime(df['日付'])
df['年月'] = df['日付'].dt.strftime('%Y-%m')
# 年月 × カテゴリ で売上を集計(クロス集計)
report = df.pivot_table(
index='年月',
columns='カテゴリ',
values='売上金額',
aggfunc='sum',
fill_value=0,
)
print(report)
report.to_excel('monthly_report.xlsx')
print('レポートを出力しました')
pivot_table を使うと、Excelのピボットテーブルと同じクロス集計がコード数行で実現できます。毎月のレポート作成を完全に自動化できます。
まとめ
pandasの基本操作は、この5つを押さえれば実務の大半をカバーできます。
-
読み込み:
pd.read_csv() -
絞り込み:
df[df['列'] == '値'] -
集計:
df.groupby('列')['対象'].sum() -
並べ替え:
df.sort_values() -
出力:
to_csv()/to_excel()
Excelで毎回手作業していた集計をコード化すれば、同じ処理を一瞬で・何度でも実行できます。まずは手元のCSVで groupby を試してみるのがおすすめです。
データ集計・分析の自動化のご相談
「毎月のレポート作成を自動化したい」「大量のデータを集計・可視化したい」などのご相談を受け付けています。