0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

pandasでCSVを集計する基本【データ分析の第一歩】

0
Posted at

はじめに

「売上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つを押さえれば実務の大半をカバーできます。

  1. 読み込みpd.read_csv()
  2. 絞り込みdf[df['列'] == '値']
  3. 集計df.groupby('列')['対象'].sum()
  4. 並べ替えdf.sort_values()
  5. 出力to_csv() / to_excel()

Excelで毎回手作業していた集計をコード化すれば、同じ処理を一瞬で・何度でも実行できます。まずは手元のCSVで groupby を試してみるのがおすすめです。


データ集計・分析の自動化のご相談

「毎月のレポート作成を自動化したい」「大量のデータを集計・可視化したい」などのご相談を受け付けています。

🌐 https://datarou.com

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?