Pythonデータ分析 #1 pandas入門 — ノートブックとDataFrameという作業台

読了 6分

毎月同じ Excel ファイルを開いて、同じフィルタをかけ、同じピボットテーブルを作っているなら、その作業はコードに置き換えられます。このシリーズは、Excel や SQL でデータを触ったことのある方が pandas で同じ仕事をコードで処理する方法 を全7回で身につける過程です。Python の文法は モダンPython基礎 レベルで十分です。

  • #1 pandas入門 — ノートブックとDataFrameという作業台 ← 今回
  • #2 データの読み込みと探索
  • #3 選択とフィルタ
  • #4 変形と欠損値
  • #5 グループ・集計・結合
  • #6 可視化
  • #7 polars体験とまとめ

Excelでやっていたことをコードに移すと何が良くなるのか #

Excel は優れた道具です。しかし、分析が大きくなると 3 つの場面で限界にぶつかります。この 3 つがシリーズ全体を貫く動機です。

  • 再現が難しい。クリックで作った結果は過程が残らないので、1か月後に「この数字はどうやって出したのか」という質問に答えにくくなります。コードは過程そのものが記録なので、再実行すれば同じ結果が出ます。
  • 大きなデータを開けない。Excel シートの上限は 1,048,576 行で、そこに届く前にスクロールや数式の再計算が重くなります。pandas はメモリが許す限り、数百万行でも同じコードで扱えます。
  • 繰り返しが手作業になる。100 個のファイルに同じ整理をするなら、Excel では 100 回開くことになります。コードならループ 1 つで終わります。

環境準備: uvでpandasとJupyterをインストール #

今回は作業環境を作り、pandas の 2 つの中核構造である Series と DataFrame を手を動かして作ってみます。環境は uv ひとつで作ります。プロジェクトを初期化して pandas と JupyterLab を追加し、ノートブックサーバーを起動します。

プロジェクトのセットアップ
uv init data-analysis --python 3.14
cd data-analysis
uv add pandas jupyterlab
uv run jupyter lab

# ブラウザが開いたら、左のランチャーから Python 3 ノートブックを新規作成してください

ノートブックという作業スタイル #

.py スクリプトは上から下まで一気に実行されますが、ノートブックはコードを セル という小さな枠に分けて書き、セルを 1 つ実行するとその結果がすぐ下に表示されます。変数はセルが終わっても生きているので、次のセルで続けて使えます。データ分析は「読み込んで、眺めて、少し変えてみて、結果を確認して」の繰り返しなので、変更したセルだけを再実行して結果を目で確かめられるノートブックがこの流れによく合います。このシリーズのコードはすべてノートブックのセル単位で書いていきます。

SeriesとDataFrame #

pandas の構造は 2 つだけ知っていれば十分です。

  • Series: 値が一列に並んだ 1 次元の構造です。Excel の列 1 本に相当します。
  • DataFrame: Series が横に並んだ 2 次元の表です。Excel のシート 1 枚に相当します。

たとえ話として安全なのはここまでで、違いが 1 つあります。pandas のすべての行には インデックス という名札が付きます。Excel の行番号はただの位置ですが、pandas のインデックスはデータの一部なので、並べ替えてもフィルタしても各行に付いて回り、日付や ID をインデックスにすれば位置ではなく名前で行を探せます。今は「行ごとに名札がある」ということだけ覚えておけば十分です。

最初のDataFrameを作る #

いちばん簡単な材料である dict から作ってみます。キーが列名、値のリストが列の中身になります。

セル1: DataFrameを作る
import pandas as pd

df = pd.DataFrame({
    "メニュー": ["アメリカーノ", "カフェラテ", "クロワッサン", "サンドイッチ"],
    "価格": [4500, 5000, 3800, 6500],
    "販売数": [120, 95, 40, 25],
    "分類": ["ドリンク", "ドリンク", "ベーカリー", "フード"],
})
df
出力
     メニュー    価格  販売数     分類
0  アメリカーノ  4500  120   ドリンク
1   カフェラテ  5000   95   ドリンク
2  クロワッサン  3800   40  ベーカリー
3  サンドイッチ  6500   25    フード

セルの最後の行に変数名だけを書くと、ノートブックが表としてレンダリングしてくれます。print() は要りません。いちばん左の 0〜3 が、先ほど説明したインデックスです。指定しなければ 0 から始まる番号が自動で付きます。

列アクセスとdtypes #

列を 1 本取り出すと Series が返ります。

セル2: 列アクセス
df["価格"]
# 0    4500
# 1    5000
# 2    3800
# 3    6500
# Name: 価格, dtype: int64

Series 同士は Excel の数式のように丸ごと演算できます。行ごとに数式をドラッグで埋める必要はなく、新しい列を 1 行で作れます。

セル3: 新しい列を作る
df["売上"] = df["価格"] * df["販売数"]
df

表の右側に、行ごとに価格 × 販売数を計算した売上列が付きます。各列の型は dtypes で確認します。

セル4: 型の確認
df.dtypes
# メニュー    object
# 価格       int64
# 販売数      int64
# 分類      object
# 売上       int64

数値の列は int64、文字列の列は object になりました。実際の分析では、数値が入っているはずの列が object として読み込まれることが頻繁に起きますが、そのとき最初に見るのがこの dtypes です。

データを見る最初の3アクション: head, info, describe #

初めて見るデータを受け取ったとき、反射的に実行する 3 つがあります。このうち describe() の出力だけ少し見ておきます。

セル5: 最初の3アクション
df.head()      # 先頭5行のプレビュー
df.info()      # 行数、列ごとの型、欠損値の数
df.describe()  # 数値列の平均、最小/最大などの要約統計
df.describe() の出力
            価格    販売数        売上
count     4.00    4.00      4.00
mean   4950.00   70.00 332375.00
min    3800.00   25.00 152000.00
max    6500.00  120.00 540000.00

4 行の表では物足りなく見えますが、行が 10 万件あるとき、この 1 行がデータの全体像を見せてくれます。3 アクションの出力をきちんと読む方法は、#2 データの読み込みと探索 で実際の CSV ファイルを使って詳しく扱います。

ノートブックの落とし穴: セルの実行順序 #

ノートブックには 1 つ落とし穴があります。セルは書かれた順ではなく、実行した順に反映されます。上のセルを直して再実行しても、下のセルたちは古い結果を基に作った変数を持ったままですし、セルを削除してもそのセルが作った変数はメモリに残っています。このずれが積もると、「ノートブック上では動いたのに、開き直すと動かない」状態になります。予防法は単純です。セルはできるだけ上から下に読める順序に整理し、区切りのたびに Restart Kernel and Run All Cells で最初から最後まで一気に回してみます。最初から最後まできれいに通るノートブックだけが、再現可能な分析です。最初の動機だった「再現可能」は、ノートブックを使えば自動的に手に入るものではなく、この習慣から生まれます。

まとめ #

今回作った土台です。

  • Excel と比べたコード分析の利点: 再現可能、大きなデータ、繰り返しの自動化
  • uv add pandas jupyterlab + uv run jupyter lab で環境構築
  • Series は列 1 本、DataFrame は表 1 枚、インデックスは行の名札
  • dict からの DataFrame 作成、列アクセス、列演算、dtypes の確認
  • 最初の 3 アクション head / info / describe と、セル実行順序の落とし穴

次回(#2 データの読み込みと探索)では、自分で作った表ではなく、実際の CSV・Excel ファイルを読み込む方法 を扱います。read_csv の主要オプション、エンコーディング問題、そして head / info / describe で見知らぬデータの輪郭をつかむ手順まで整理します。

X