Step 22:Pandasとは?DataFrameを作ろう

🐼 ステップ22: Pandasとは?DataFrameを作ろう

データ分析の最強ツール、Pandasを使い始めよう!

ステップ21まででNumPyを学びました。今回からは、データ分析のための最も重要なライブラリ「Pandas」を学んでいきます。PandasはExcelのような「表形式のデータ」を扱うためのツールです。

📖 このステップで学ぶこと

・Pandasとは何か、どんなことができるか

・DataFrame(データフレーム)の基本

・辞書やリストからDataFrameを作成する方法

・CSVファイルの読み込み方

・DataFrameの構造を確認する方法

学習時間の目安: 2.5〜3時間

🎯 1. Pandasとは?

まず、「Pandas」とは何かを理解しましょう。

🔰 Pandasの基本的な意味

Pandas(パンダス)とは、Pythonで表形式のデータを扱うためのライブラリです。

📌 Pandasのイメージ

Excelで表を作ったことはありますか?

Pandasは、Pythonの中でExcelのような表を作って操作できるツールです。

違いは、プログラムで自動的に処理できること。

100万行のデータでも、一瞬で計算できます!

📘 Pandasでできること

Pandasを使うと、以下のようなことが簡単にできます。

できること 具体例
ファイル読み書き Excel、CSVファイルを読み込む・保存する
データ抽出 「売上が100万以上」のデータだけ取り出す
集計・計算 合計、平均、グループ別集計
データ加工 列の追加、データの結合、形式変換
欠損値処理 空白データを見つけて埋める・削除する

💡 なぜ「Pandas」という名前?

Panel Data(パネルデータ)という統計用語から来ています。

かわいいパンダ🐼のイメージもあって覚えやすいですね!

📘 ExcelとPandasの比較

「Excelがあれば十分では?」と思うかもしれません。比較してみましょう。

項目 Excel Pandas
操作方法 マウスで手作業 プログラムで自動化
データ量 約100万行が限界 メモリの許す限り
処理速度 大量データは遅い 高速処理が可能
再現性 手順を覚えていないと再現困難 コードを実行すれば同じ結果

📦 2. Pandasを使う準備

Pandasを使うための準備をしましょう。

🔰 Google Colabではすでにインストール済み

Google Colabを使っている場合、Pandasは最初から使える状態です。NumPyと同じですね。

📝 Pandasをインポートする

Pandasを使うには、まずインポートする必要があります。

📝 Pandasのインポート方法

import pandas as pd

import pandas:Pandasライブラリを読み込む

as pd:「pd」という短い名前で使えるようにする

コード:Pandasのインポート

# Pandasをインポート(pdという名前で使うのが一般的)
import pandas as pd

# バージョンを確認
print(pd.__version__)

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

2.2.2

💡 なぜ「pd」と略すの?

データ分析の世界では、「import pandas as pd」がお約束になっています。

毎回「pandas.DataFrame」と書くより、「pd.DataFrame」の方が短くて楽だからです。

NumPyの「np」と同じ考え方ですね。

📘 NumPyも一緒にインポートする

Pandasは内部でNumPyを使っています。そのため、両方を一緒にインポートすることが多いです。

コード:PandasとNumPyのインポート

# PandasとNumPyをインポート
import pandas as pd
import numpy as np

# バージョンを確認
print("Pandas version:", pd.__version__)
print("NumPy version:", np.__version__)

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

Pandas version: 2.2.2
NumPy version: 1.26.4

📊 3. DataFrameとは?

Pandasの中心となるデータ構造「DataFrame」について学びましょう。

🔰 DataFrameの基本的な意味

DataFrame(データフレーム)とは、表形式のデータ構造です。Excelのシート1枚分をイメージしてください。

📌 DataFrameのイメージ

Excelで「名前」「年齢」「都市」という列を作り、データを入力した表を想像してください。

DataFrameは、まさにその「表」をPythonの中で扱えるようにしたものです。

📘 DataFrameの構造

DataFrameには3つの重要な要素があります。

要素 説明
行(Row) 各レコード(データ1件分) 太郎さんのデータ1行
列(Column) 各項目(データの種類) 「名前」「年齢」「都市」
インデックス 行を識別する番号や名前 0, 1, 2… または ID番号

📘 最初のDataFrameを作ってみよう

実際にDataFrameを作成して、その構造を確認しましょう。

まず、データを辞書で用意します。

コード:辞書でデータを準備

# データを辞書で準備する
# キー → 列名になる
# 値(リスト) → その列のデータになる

data = {
    '名前': ['太郎', '花子', '次郎'],
    '年齢': [25, 23, 27],
    '都市': ['東京', '大阪', '名古屋']
}

※ 画面が小さい場合は、コードブロックを横にスクロールできます

💡 辞書のポイント

キー(’名前’, ‘年齢’, ‘都市’)列名になります。

値(リスト)その列のデータになります。

各リストの長さは同じにする必要があります(全て3個ずつ)。

次に、pd.DataFrame()でDataFrameを作成します。

コード:DataFrameを作成

import pandas as pd

# データを辞書で準備
data = {
    '名前': ['太郎', '花子', '次郎'],
    '年齢': [25, 23, 27],
    '都市': ['東京', '大阪', '名古屋']
}

# pd.DataFrame()でDataFrameを作成
# 引数に辞書を渡す
df = pd.DataFrame(data)

# 作成したDataFrameを表示
print(df)

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

   名前  年齢   都市
0  太郎  25   東京
1  花子  23   大阪
2  次郎  27  名古屋

💡 実行結果の見方

左端の0, 1, 2:インデックス(行番号)です。自動で付きます。

上の「名前」「年齢」「都市」:列名(辞書のキー)です。

中のデータ:各列のデータ(辞書の値)です。

📘 DataFrameの基本情報を確認する

作成したDataFrameの情報を確認してみましょう。

コード:DataFrameの基本情報

import pandas as pd

data = {
    '商品名': ['リンゴ', 'バナナ', 'オレンジ', 'イチゴ'],
    '価格': [150, 100, 120, 300],
    '在庫': [50, 80, 60, 30]
}

df = pd.DataFrame(data)

print("【DataFrame】")
print(df)

print()

# shape属性で行数と列数を確認
# (行数, 列数)のタプルが返る
print("形状(行数, 列数):", df.shape)

# len()で行数を取得
print("行数:", len(df))

# len(df.columns)で列数を取得
print("列数:", len(df.columns))

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

【DataFrame】
   商品名   価格  在庫
0  リンゴ  150  50
1  バナナ  100  80
2  オレンジ  120  60
3  イチゴ  300  30

形状(行数, 列数): (4, 3)
行数: 4
列数: 3

🔨 4. DataFrameの作成方法

DataFrameを作る方法はいくつかあります。順番に見ていきましょう。

📘 方法1:辞書から作成(最も基本)

先ほど学んだ方法です。もう一度確認しましょう。

📝 辞書からDataFrameを作成する書き方

df = pd.DataFrame(辞書)

・辞書のキー → 列名

・辞書の値(リスト) → その列のデータ

コード:テストの点数データ

import pandas as pd

# テストの点数データを辞書で準備
scores_data = {
    '名前': ['太郎', '花子', '次郎', '美咲', '健太'],
    '数学': [85, 92, 78, 88, 90],
    '英語': [90, 88, 82, 95, 87],
    '国語': [78, 85, 88, 82, 91]
}

# DataFrameを作成
df = pd.DataFrame(scores_data)

print(df)

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

   名前  数学  英語  国語
0  太郎  85  90  78
1  花子  92  88  85
2  次郎  78  82  88
3  美咲  88  95  82
4  健太  90  87  91

📘 方法2:リストのリストから作成

データを「行ごと」に持っている場合は、リストのリストを使います。

📝 リストのリストからDataFrameを作成する書き方

df = pd.DataFrame(リスト, columns=[‘列名1’, ‘列名2’, …])

・各リスト → 1行分のデータ

・columns引数 → 列名を指定(必須)

コード:リストのリストから作成

import pandas as pd

# データをリストのリストで準備
# 各リストが1行分のデータ
data = [
    ['太郎', 25, '東京'],      # 1行目
    ['花子', 23, '大阪'],      # 2行目
    ['次郎', 27, '名古屋']     # 3行目
]

# columns引数で列名を指定
df = pd.DataFrame(data, columns=['名前', '年齢', '都市'])

print(df)

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

   名前  年齢   都市
0  太郎  25   東京
1  花子  23   大阪
2  次郎  27  名古屋

💡 辞書とリストのリストの使い分け

辞書:列(項目)ごとにデータがまとまっている時

リストのリスト:行(レコード)ごとにデータがまとまっている時

どちらでも同じDataFrameが作れます。データの形に合わせて選びましょう。

📘 方法3:NumPy配列から作成

NumPy配列をDataFrameに変換することもできます。

コード:NumPy配列から作成

import pandas as pd
import numpy as np

# NumPy配列を作成(3行3列)
arr = np.array([
    [100, 200, 300],
    [110, 220, 330],
    [120, 240, 360]
])

# DataFrameに変換
# columns引数で列名を指定
# index引数で行のインデックス名を指定
df = pd.DataFrame(arr, 
                  columns=['商品A', '商品B', '商品C'],
                  index=['店舗1', '店舗2', '店舗3'])

print(df)

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

      商品A  商品B  商品C
店舗1  100  200  300
店舗2  110  220  330
店舗3  120  240  360

💡 index引数について

index引数で、行のインデックス(左端の番号)を自分で設定できます。

指定しない場合は、0, 1, 2…の番号が自動で付きます。

📁 5. CSVファイルの読み込み

実際のデータ分析では、CSVファイルからデータを読み込むことが多いです。

🔰 CSVファイルとは?

CSV(Comma-Separated Values)は、カンマで区切られたテキストファイルです。

📌 CSVファイルの中身(例)

名前,年齢,都市
太郎,25,東京
花子,23,大阪
次郎,27,名古屋

1行目が列名、2行目以降がデータです。

Excelでも開けますが、中身は単純なテキストです。

📝 read_csv()でファイルを読み込む

📝 CSVファイルの読み込み方

df = pd.read_csv(‘ファイル名.csv’)

・ファイル名を指定するだけで読み込める

・自動的にDataFrameが作成される

コード:CSVファイルの読み込み(デモ)

import pandas as pd

# 実際のファイルを読み込む場合
# df = pd.read_csv('data.csv')

# デモ用:文字列からDataFrameを作成
# (実際の作業ではこの方法は使いません)
sample_data = """名前,年齢,都市,年収
太郎,25,東京,400
花子,23,大阪,380
次郎,27,名古屋,420
美咲,24,福岡,390
健太,26,札幌,410"""

from io import StringIO
df = pd.read_csv(StringIO(sample_data))

print(df)

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

   名前  年齢   都市  年収
0  太郎  25   東京 400
1  花子  23   大阪 380
2  次郎  27  名古屋 420
3  美咲  24   福岡 390
4  健太  26   札幌 410

📘 read_csv()のよく使うオプション

ファイルによっては、オプションを指定する必要があります。

オプション 意味 使用例
encoding 文字コードを指定 encoding=’utf-8′ または ‘shift-jis’
index_col 指定した列をインデックスに index_col=0(最初の列)
header 列名の行を指定 header=None(列名なし)
sep 区切り文字を指定 sep=’\t’(タブ区切り)

💡 文字化けしたら?

日本語のCSVファイルで文字化けする場合は、encodingを指定してみましょう。

・Excelで作ったCSV → encoding=’shift-jis’

・それ以外 → encoding=’utf-8′

🔍 6. DataFrameの構造を確認する

作成したDataFrameの構造を確認する方法を学びましょう。

📘 列名とインデックスを確認

コード:列名とインデックスの確認

import pandas as pd

data = {
    '商品名': ['リンゴ', 'バナナ', 'オレンジ', 'イチゴ', 'ブドウ'],
    '価格': [150, 100, 120, 300, 250],
    '在庫': [50, 80, 60, 30, 40],
    'カテゴリ': ['果物', '果物', '果物', '果物', '果物']
}

df = pd.DataFrame(data)

print("【DataFrame】")
print(df)

print()

# columns属性で列名を取得
print("列名:", df.columns.tolist())

# index属性でインデックスを取得
print("インデックス:", df.index.tolist())

# shape属性で形状を取得
print("形状:", df.shape)

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

【DataFrame】
   商品名   価格  在庫 カテゴリ
0  リンゴ  150  50   果物
1  バナナ  100  80   果物
2  オレンジ  120  60   果物
3  イチゴ  300  30   果物
4  ブドウ  250  40   果物

列名: ['商品名', '価格', '在庫', 'カテゴリ']
インデックス: [0, 1, 2, 3, 4]
形状: (5, 4)

📘 データ型を確認

各列がどんなデータ型かを確認しましょう。

コード:データ型の確認

import pandas as pd

data = {
    '名前': ['太郎', '花子', '次郎'],
    '年齢': [25, 23, 27],
    '身長': [175.5, 162.3, 180.0],
    '会員': [True, True, False]
}

df = pd.DataFrame(data)

print("【DataFrame】")
print(df)

print()

# dtypes属性で各列のデータ型を確認
print("各列のデータ型:")
print(df.dtypes)

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

【DataFrame】
   名前  年齢    身長    会員
0  太郎  25  175.5  True
1  花子  23  162.3  True
2  次郎  27  180.0 False

各列のデータ型:
名前       object
年齢        int64
身長      float64
会員         bool
dtype: object

📌 Pandasの主なデータ型

データ型 意味
object 文字列 ‘太郎’, ‘東京’
int64 整数 25, 100
float64 小数 175.5, 3.14
bool 真偽値 True, False
datetime64 日付・時刻 2024-01-01

💾 7. DataFrameの保存

作成したDataFrameをファイルに保存する方法を学びましょう。

📝 to_csv()でCSVファイルとして保存

📝 CSVファイルの保存方法

df.to_csv(‘ファイル名.csv’, index=False)

index=False:インデックス(行番号)を保存しない

encoding=’utf-8′:文字コードを指定

コード:CSVファイルとして保存

import pandas as pd

data = {
    '商品名': ['リンゴ', 'バナナ', 'オレンジ'],
    '価格': [150, 100, 120],
    '在庫': [50, 80, 60]
}

df = pd.DataFrame(data)

print("【DataFrame】")
print(df)

# CSVファイルとして保存
# df.to_csv('products.csv', index=False, encoding='utf-8')

print()
print("【保存する場合のコード】")
print("df.to_csv('products.csv', index=False, encoding='utf-8')")
print()
print("・index=False → 行番号を保存しない")
print("・encoding='utf-8' → 文字コードを指定")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

【DataFrame】
   商品名   価格  在庫
0  リンゴ  150  50
1  バナナ  100  80
2  オレンジ  120  60

【保存する場合のコード】
df.to_csv('products.csv', index=False, encoding='utf-8')

・index=False → 行番号を保存しない
・encoding='utf-8' → 文字コードを指定

📘 to_excel()でExcelファイルとして保存

コード:Excelファイルとして保存

import pandas as pd

data = {
    '年月': ['2024-01', '2024-02', '2024-03'],
    '売上': [1200, 1350, 1500]
}

df = pd.DataFrame(data)

print("【DataFrame】")
print(df)

# Excelファイルとして保存
# df.to_excel('sales.xlsx', index=False, sheet_name='売上')

print()
print("【保存する場合のコード】")
print("df.to_excel('sales.xlsx', index=False, sheet_name='売上')")
print()
print("・sheet_name='売上' → シート名を指定")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

【DataFrame】
      年月    売上
0  2024-01  1200
1  2024-02  1350
2  2024-03  1500

【保存する場合のコード】
df.to_excel('sales.xlsx', index=False, sheet_name='売上')

・sheet_name='売上' → シート名を指定

📝 練習問題

ここまで学んだことを、実際に手を動かして確認しましょう。

問題1:辞書からDataFrameを作成(初級)

📋 問題

以下のデータを持つDataFrameを作成してください。

・都市名: [‘東京’, ‘大阪’, ‘名古屋’, ‘福岡’]

・人口(万人): [1400, 880, 230, 160]

・面積(km²): [2194, 225, 326, 343]

解答例を見る

コード

import pandas as pd

data = {
    '都市名': ['東京', '大阪', '名古屋', '福岡'],
    '人口': [1400, 880, 230, 160],
    '面積': [2194, 225, 326, 343]
}

df = pd.DataFrame(data)

print(df)
print()
print("形状:", df.shape)
print("列名:", df.columns.tolist())

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

   都市名    人口   面積
0   東京  1400  2194
1   大阪   880   225
2  名古屋   230   326
3   福岡   160   343

形状: (4, 3)
列名: ['都市名', '人口', '面積']

問題2:リストからDataFrameを作成(初級)

📋 問題

以下のデータをリストのリストで表現し、DataFrameを作成してください。

データ: [[‘太郎’, 85, 90], [‘花子’, 92, 88], [‘次郎’, 78, 95]]

列名: [‘名前’, ‘数学’, ‘英語’]

解答例を見る

コード

import pandas as pd

data = [
    ['太郎', 85, 90],
    ['花子', 92, 88],
    ['次郎', 78, 95]
]

df = pd.DataFrame(data, columns=['名前', '数学', '英語'])

print(df)
print()
print("データ型:")
print(df.dtypes)

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

   名前  数学  英語
0  太郎  85  90
1  花子  92  88
2  次郎  78  95

データ型:
名前     object
数学      int64
英語      int64
dtype: object

問題3:インデックス付きDataFrame(中級)

📋 問題

以下の商品データをDataFrameにし、商品名をインデックスに設定してください。

商品: [‘リンゴ’, ‘バナナ’, ‘オレンジ’, ‘イチゴ’]

価格: [150, 100, 120, 300]

在庫: [50, 80, 60, 30]

解答例を見る

コード

import pandas as pd

data = {
    '商品': ['リンゴ', 'バナナ', 'オレンジ', 'イチゴ'],
    '価格': [150, 100, 120, 300],
    '在庫': [50, 80, 60, 30]
}

df = pd.DataFrame(data)

# set_index()で商品名をインデックスに設定
df = df.set_index('商品')

print(df)
print()
print("インデックス:", df.index.tolist())

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

        価格  在庫
商品            
リンゴ    150  50
バナナ    100  80
オレンジ   120  60
イチゴ    300  30

インデックス: ['リンゴ', 'バナナ', 'オレンジ', 'イチゴ']

問題4:NumPy配列からDataFrame(中級)

📋 問題

3行4列のNumPy配列(1〜12の連続した数)を作成し、DataFrameに変換してください。

列名: [‘A列’, ‘B列’, ‘C列’, ‘D列’]

インデックス: [‘1行目’, ‘2行目’, ‘3行目’]

解答例を見る

コード

import pandas as pd
import numpy as np

# 1〜12の配列を3行4列に整形
arr = np.arange(1, 13).reshape(3, 4)

# DataFrameに変換
df = pd.DataFrame(arr,
                  columns=['A列', 'B列', 'C列', 'D列'],
                  index=['1行目', '2行目', '3行目'])

print("NumPy配列:")
print(arr)
print()
print("DataFrame:")
print(df)

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

NumPy配列:
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]

DataFrame:
      A列  B列  C列  D列
1行目   1   2   3   4
2行目   5   6   7   8
3行目   9  10  11  12

問題5:複数のデータ型を含むDataFrame(上級)

📋 問題

以下の情報を持つDataFrameを作成し、各列のデータ型を確認してください。

・社員ID: [101, 102, 103, 104]

・名前: [‘佐藤’, ‘鈴木’, ‘田中’, ‘高橋’]

・年齢: [28, 35, 42, 31]

・年収: [450.5, 580.0, 720.5, 520.0](万円)

・正社員: [True, True, False, True]

解答例を見る

コード

import pandas as pd

data = {
    '社員ID': [101, 102, 103, 104],
    '名前': ['佐藤', '鈴木', '田中', '高橋'],
    '年齢': [28, 35, 42, 31],
    '年収': [450.5, 580.0, 720.5, 520.0],
    '正社員': [True, True, False, True]
}

df = pd.DataFrame(data)

print("DataFrame:")
print(df)

print()
print("各列のデータ型:")
print(df.dtypes)

print()
print(f"行数: {len(df)}")
print(f"列数: {len(df.columns)}")
print(f"形状: {df.shape}")

※ 画面が小さい場合は、コードブロックを横にスクロールできます

実行結果

DataFrame:
   社員ID  名前  年齢    年収   正社員
0   101  佐藤  28  450.5  True
1   102  鈴木  35  580.0  True
2   103  田中  42  720.5 False
3   104  高橋  31  520.0  True

各列のデータ型:
社員ID       int64
名前        object
年齢         int64
年収       float64
正社員         bool
dtype: object

行数: 4
列数: 5
形状: (4, 5)

🎯 このステップのまとめ

✅ 学んだこと

Pandasはデータ分析の最強ツール

import pandas as pdでインポート

DataFrameは表形式のデータ構造

辞書リストのリストNumPy配列からDataFrameを作成できる

pd.read_csv()でCSVファイルを読み込める

shapecolumnsindexdtypesで構造を確認できる

to_csv()to_excel()でファイルに保存できる

💡 次のステップに進む前に確認

以下のことができるようになったか確認しましょう:

□ Pandasをインポートできる

□ 辞書からDataFrameを作成できる

□ DataFrameの行数・列数を確認できる

□ 列名とインデックスを確認できる

□ 各列のデータ型を確認できる

これらができたら、次のステップに進みましょう!

❓ よくある質問

Q1: PandasとNumPyの違いは何ですか?

A: NumPyは数値計算に特化し、全ての要素が同じ型の配列を扱います。Pandasは表形式のデータを扱い、列ごとに異なる型(名前は文字列、年齢は数値など)を持てます。Pandasは内部でNumPyを使っているので、両方使えることが多いです。

Q2: DataFrameとExcelの違いは?

A: Excelは手作業でデータを操作、DataFrameはプログラムで自動処理します。DataFrameは大量のデータを高速に処理でき、処理を繰り返し実行できるので、データ分析に向いています。

Q3: インデックスは必要ですか?

A: 必須ではありませんが、行を識別するのに便利です。日付、ID、名前などをインデックスにすると、データの抽出や結合が簡単になります。指定しない場合は0, 1, 2…の番号が自動的に付きます。

Q4: CSVファイルが日本語だと文字化けします

A: encoding=’utf-8′またはencoding=’shift-jis’を指定してください。Excelで作ったCSVは‘shift-jis’、それ以外は‘utf-8’が多いです。どちらかわからない場合は両方試してみましょう。

Q5: DataFrameのサイズに制限はありますか?

A: メモリの許す限り扱えます。Google Colabなら数GB程度まで大丈夫です。非常に大きなデータ(数GB以上)の場合は、chunksize(分割読み込み)やDaskなど別のツールを検討します。

📝

学習メモ

Pythonデータ分析入門 - Step 22

📋 過去のメモ一覧
#artnasekai #学習メモ
LINE