Pythonで始めるデータ分析入門|pandasの基本操作を実践で学ぶ
Pythonのpandasライブラリを使ったデータ分析の基本を解説。CSV読み込み、データの加工、集計、可視化まで、実践的なコード例で学べます。
editor

チョットデキルの編集部です。プログラミング学習に役立つ情報をお届けします。
データ分析は、ビジネスの意思決定から学術研究まで、あらゆる分野で求められるスキルです。Pythonはデータ分析の分野で最も広く使われているプログラミング言語であり、中でもpandasというライブラリは、表形式のデータを直感的に操作できる強力なツールとして定番の存在です。本記事では、pandasの基本的なデータ構造の理解からCSVの読み込み、データの加工・集計、そしてmatplotlibによる可視化まで、実践的なコード例を交えながら一通りの流れを解説します。Pythonとは?をまだ読んでいない方は、先にそちらで概要を掴んでおくとスムーズに進められます。
Python データ分析入門 とは
Python と pandas / NumPy / Matplotlib を使って、CSV や Excel のデータを集計・可視化・前処理する一連の手順のことです。Jupyter Notebook を使えば 1 行ずつ結果を確認しながら進められます。
TL;DR 早わかりサマリー
- pandas を使えば、Excel で数時間かかる集計が Python なら 数行・数秒で終わります
- 覚えるべきは DataFrame の読み込み・整形・集計・可視化の 4 ステップ
- Jupyter Notebook / Google Colab で環境構築不要に始められます
- AI 時代でも、データ整形と前処理の地力は人間が持つべき必須スキル
pandasの基本データ構造:SeriesとDataFrame
pandasには2つの主要なデータ構造があります。1次元のデータを扱う「Series」と、2次元の表形式データを扱う「DataFrame」です。
Python
import pandas as pd
# Seriesは1次元のデータ
scores = pd.Series([85, 92, 78, 95, 88], name="数学")
print(scores)
print(f"平均点: {scores.mean()}")Seriesはインデックス付きの1次元配列で、リストや辞書から簡単に作成できます。一方、DataFrameは複数のSeriesを束ねたような構造で、Excelのスプレッドシートに近い感覚でデータを扱えます。
Python
# DataFrameは2次元の表データ
data = {
"名前": ["田中", "佐藤", "鈴木", "高橋", "伊藤"],
"数学": [85, 92, 78, 95, 88],
"英語": [90, 85, 82, 88, 95],
"国語": [78, 88, 90, 82, 85]
}
df = pd.DataFrame(data)
print(df)実行すると、行と列で構成された見やすい表が出力されます。DataFrameはデータ分析のほぼすべての場面で使う基本構造なので、しっかり理解しておきましょう。
CSVファイルの読み込み
実際のデータ分析では、CSVファイルからデータを読み込むケースが大半です。pandasのread_csv()関数を使えば、たった1行でDataFrameとして読み込めます。
Python
import pandas as pd
# CSVファイルを読み込む
df = pd.read_csv("sales_data.csv")
# データの概要を確認する
print(df.shape) # 行数と列数
print(df.head()) # 先頭5行を表示
print(df.dtypes) # 各列のデータ型
print(df.describe()) # 基本統計量(平均、標準偏差、最小値、最大値など)shapeで全体のサイズを確認し、head()で先頭のデータを目視確認し、describe()で基本的な統計量を一括で把握する。この3つはデータを読み込んだ直後に必ず実行する定番の操作です。
エンコーディングの問題が発生する場合は、以下のように指定します。
Python
df = pd.read_csv("sales_data.csv", encoding="cp932") # Windows環境のCSV
df = pd.read_csv("sales_data.csv", encoding="utf-8-sig") # BOM付きUTF-8データの選択とフィルタリング
DataFrameから必要なデータだけを取り出す操作は、分析の基本中の基本です。列の選択、条件によるフィルタリング、複数条件の組み合わせを見ていきましょう。
Python
# 特定の列を選択
names = df["名前"]
subset = df[["名前", "数学"]] # 複数列を選択
# 条件によるフィルタリング
high_math = df[df["数学"] >= 90]
print(high_math)複数の条件を組み合わせる場合は、&(AND)や|(OR)を使い、各条件を括弧で囲みます。
Python
# 数学90点以上 かつ 英語85点以上
excellent = df[(df["数学"] >= 90) & (df["英語"] >= 85)]
print(excellent)
# 数学95点以上 または 英語95点以上
top_students = df[(df["数学"] >= 95) | (df["英語"] >= 95)]
print(top_students)この条件フィルタリングは、SQLのWHERE句に相当する操作です。pandasでは直感的なPython式で同じことを表現できます。
データの加工と新しい列の追加
既存のデータから新しい列を計算して追加する操作も頻繁に行います。
Python
# 合計点を計算して新しい列を追加
df["合計"] = df["数学"] + df["英語"] + df["国語"]
# 平均点の列を追加
df["平均"] = df[["数学", "英語", "国語"]].mean(axis=1)
# 条件に基づいてラベルを付ける
df["評価"] = df["平均"].apply(lambda x: "A" if x >= 90 else "B" if x >= 80 else "C")
print(df)apply()メソッドを使えば、任意の関数を各行に適用できます。ここではlambda式で平均点に応じた評価ラベルを付けています。
groupbyによる集計
データ分析で最も強力な機能の1つが、グループ化と集計です。pandasのgroupby()は、SQLのGROUP BYと同じ発想で、特定の列の値ごとにデータをまとめて集計できます。
Python
# 売上データの例
sales_data = {
"店舗": ["東京", "大阪", "東京", "大阪", "東京", "大阪"],
"商品": ["A", "A", "B", "B", "A", "B"],
"売上": [100, 80, 150, 120, 90, 110],
"個数": [10, 8, 15, 12, 9, 11]
}
sales = pd.DataFrame(sales_data)
# 店舗ごとの売上合計
print(sales.groupby("店舗")["売上"].sum())
# 店舗ごとの複数の統計量を一括算出
print(sales.groupby("店舗")["売上"].agg(["sum", "mean", "count"]))さらに、複数の列でグループ化することも可能です。
Python
# 店舗と商品の組み合わせごとに集計
result = sales.groupby(["店舗", "商品"])["売上"].sum()
print(result)agg()メソッドを使えば、合計・平均・件数などの複数の集計関数を一度に適用できるため、レポート作成時に非常に便利です。
欠損値の処理
実データには欠損値(NaN)が含まれていることがほとんどです。pandasは欠損値の検出と処理を簡単に行える機能を備えています。
Python
# 欠損値の確認
print(df.isnull().sum()) # 各列の欠損値の数
# 欠損値を特定の値で埋める
df["売上"] = df["売上"].fillna(0)
# 欠損値を平均値で埋める
df["数学"] = df["数学"].fillna(df["数学"].mean())
# 欠損値を含む行を削除する
df_clean = df.dropna()欠損値をどう処理するかは分析の結果に直接影響します。0で埋めるのか、平均値で埋めるのか、行ごと削除するのか。データの性質と分析目的に応じて適切な方法を選ぶことが重要です。
matplotlibによるデータの可視化
集計したデータをグラフにすることで、数値だけでは見えにくい傾向やパターンを視覚的に把握できます。Pythonの可視化ライブラリの定番であるmatplotlibを使ってみましょう。
Python
import matplotlib.pyplot as plt
# 棒グラフ:店舗ごとの売上合計
shop_sales = sales.groupby("店舗")["売上"].sum()
shop_sales.plot(kind="bar")
plt.title("店舗別売上合計")
plt.ylabel("売上")
plt.tight_layout()
plt.show()pandasのDataFrameやSeriesにはplot()メソッドが組み込まれており、matplotlibと連携して簡潔なコードでグラフを描画できます。
Python
# 折れ線グラフ:月別の売上推移
monthly_data = {
"月": ["1月", "2月", "3月", "4月", "5月", "6月"],
"売上": [120, 135, 150, 142, 160, 175]
}
monthly = pd.DataFrame(monthly_data)
monthly.plot(x="月", y="売上", kind="line", marker="o")
plt.title("月別売上推移")
plt.ylabel("売上(万円)")
plt.grid(True)
plt.tight_layout()
plt.show()kind引数を変えるだけで、棒グラフ(bar)、折れ線グラフ(line)、円グラフ(pie)、散布図(scatter)など、さまざまな種類のグラフを作成できます。
データ分析の実践的な流れ
ここまで学んだ内容を組み合わせて、データ分析の一連の流れを実践してみましょう。
Python
import pandas as pd
import matplotlib.pyplot as plt
# 1. データの読み込み
df = pd.read_csv("sales_report.csv")
# 2. データの概要確認
print(f"データサイズ: {df.shape}")
print(df.head())
print(df.describe())
# 3. 欠損値の処理
df = df.dropna(subset=["売上"]) # 売上が欠損している行を除外
# 4. データの加工
df["月"] = pd.to_datetime(df["日付"]).dt.month
# 5. 集計
monthly_sales = df.groupby("月")["売上"].agg(["sum", "mean", "count"])
monthly_sales.columns = ["合計売上", "平均売上", "取引件数"]
print(monthly_sales)
# 6. 可視化
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
monthly_sales["合計売上"].plot(kind="bar", ax=axes[0], title="月別合計売上")
monthly_sales["取引件数"].plot(kind="line", ax=axes[1], title="月別取引件数", marker="o")
plt.tight_layout()
plt.show()読み込み、確認、前処理、加工、集計、可視化という流れは、データ分析における基本のワークフローです。データの規模や目的が変わっても、この流れは共通しています。
さらに学びを深めるには
pandasとmatplotlibの基本操作を身につけたら、次のステップとして以下の領域に進んでみてください。
- 複数のDataFrameを結合する
merge()やconcat()を使ったデータの統合 - ピボットテーブル(
pivot_table())によるクロス集計 - seabornライブラリを使ったより美しいグラフの作成
また、近年はAIを活用したデータ分析も注目されています。AIを使ったデータ分析入門では、AIツールと組み合わせた効率的な分析手法を紹介していますので、あわせて参考にしてみてください。
データ分析のスキルを確実に身につけるには、Pythonの基礎文法をしっかり理解しておくことが欠かせません。変数、リスト、辞書、ループ、関数といった基本構文があやふやなまま進めると、pandasの操作でつまずく場面が増えてしまいます。「Python基礎」コースでは、これらの基礎をハンズオン形式で体系的に学べます。データ分析の土台を固めたい方は、ぜひ受講を検討してみてください。
pandas の主要メソッド 10 選
これだけ覚えれば実務の 8 割をカバーできる、pandas の主要操作です。
Python
import pandas as pd
# 1. CSV 読み込み
df = pd.read_csv("sales.csv")
# 2. 上から 5 行確認
df.head()
# 3. データ型と件数の概要
df.info()
# 4. 統計サマリ
df.describe()
# 5. 条件抽出
df[df["amount"] > 10000]
# 6. ソート
df.sort_values("date", ascending=False)
# 7. グループ集計
df.groupby("category")["amount"].sum()
# 8. ピボット
df.pivot_table(index="category", columns="month", values="amount", aggfunc="sum")
# 9. マージ (JOIN 相当)
pd.merge(df_orders, df_users, on="user_id", how="left")
# 10. グラフ描画
df.groupby("month")["amount"].sum().plot(kind="bar")この 10 個を組み合わせれば、業務レポートのほとんどが書けます。
業務で起きる落とし穴と対処法
実務でデータ分析をすると、必ずぶつかる問題があります。
1. 日付の型ズレ CSV では日付が文字列として読み込まれます。pd.to_datetime(df["date"]) で datetime 型に変換します。
2. 欠損値の扱い NaN を 0 に置き換えるか、行ごと削除するかは意味が変わります。df.fillna(0) で 0 補完、df.dropna() で削除。
3. 重複データ df.drop_duplicates() で重複行を削除。どの列を基準にするかは subset で指定します。
4. メモリ不足 大きな CSV (数 GB) は read_csv で全件読まずに chunksize で分割読み込みします。
5. 桁あふれ 大きな数字を扱う場合、デフォルトの float64 で精度が足りないケースがあります。Decimal や category 型で対処します。
ハンズオン Step-by-Step
Python 3.10 以上と pandas で、CSV 1 つを集計するまでを試します。
Step 1. pandas をインストール
1 行で完了します。
ターミナル
pip install pandasStep 2. CSV を作る or 用意
テスト用に sales.csv を 1 つ作ります (region, amount の 2 列、5 行ほど)。
csv
region,amount
east,1000
west,2500
east,500
west,1800
east,700Step 3. 読み込んで確認
head() で先頭 5 行を表示。
Python
import pandas as pd
df = pd.read_csv("sales.csv")
print(df.head())Step 4. region 別に集計
groupby + sum で 1 行で集計できます。
Python
print(df.groupby("region")["amount"].sum())Step 5. グラフ化
Matplotlib で棒グラフ表示。jupyter 環境ならそのまま表示されます。
Python
import matplotlib.pyplot as plt
df.groupby("region")["amount"].sum().plot.bar()
plt.show()次は 5 万行クラスの実データを扱う AI を使ったデータ分析 に進みましょう。
関連リソース
よくある質問
Q. Excel と pandas、業務でどちらを使うべきですか
A. データが 1 万行を超える、複数ファイルを横断する、定期実行する、のいずれかが当てはまるなら pandas が向きます。それ以外は Excel で十分です。両方使い分けるのが理想です。
Q. pandas を学ぶのにかかる時間は
A. 基本操作は 10-20 時間、業務で困らないレベルまで 30-50 時間が目安です。Python の基本文法が分かっていれば、1 ヶ月で実務最低限のレベルに到達できます。
Q. Google Colab を使うメリットは
A. 環境構築不要、ブラウザでそのまま動く、無料で GPU も使える、Google Drive と連携できる、の 4 点が大きいです。インストールにつまづいた時点で挫折する初学者には特におすすめです。
Q. AI に Python データ分析を任せてしまえばいいのでは
A. 短期で答えだけ欲しいなら AI で十分です。ただ、AI の出力が正しいかを判断する力、自分のデータの構造を説明する力は、自分でも pandas を書けないと身に付きません。詳しくは AI を使ったデータ分析入門 との使い分けを参照してください。
Q. Jupyter Notebook と Python スクリプト、どちらで書くべき
A. 探索的に分析するなら Notebook、本番運用する定期処理なら .py スクリプトです。Notebook で書いた処理を、運用段階で .py に書き換えるのが標準的なフローです。
Q. 次に何を学べばよいですか
A. データ可視化なら Matplotlib / Seaborn / Plotly、機械学習なら scikit-learn、大規模データなら Dask / Polars が次のステップです。SQL を併用することで分析の幅が一気に広がります。詳しくは SQL とは も参照してください。
次に読むべきリソース
- 学習を始めたい方 — Python 入門コース
- 深く理解したい方 — AI を使ったデータ分析入門
- 無料相談したい方 — LuaGate 無料相談
出典・参考リンク
本記事の主張・数値・仕様に関する根拠は、以下の一次情報・公式ドキュメントを参照しています。リンク先の更新により内容が変わる場合があるため、最新情報は各公式サイトで確認してください。
- pandas 公式ドキュメント
- NumPy 公式ドキュメント
- Matplotlib 公式ドキュメント
- Jupyter 公式ドキュメント
- Python 公式ドキュメント
- MDN Web Docs (HTTP)
この記事について
- 監修: 生田 陸人 (LuaGate エンジニア / 大手 IT 企業現役エンジニア)
- 公開: 2026-05-28
- 最終更新: 2026-05-28
- カテゴリ: バックエンド
- 検証環境: Python 3.12 / pandas 2.x / NumPy 1.26 / Matplotlib 3.8
- 編集ポリシー: 公式ドキュメント・公的統計を一次情報として優先し、社内エンジニアが実機検証した内容のみを掲載しています。修正提案や事実誤認の指摘は チョットデキル運営 までお寄せください。