本文へスキップ
スキルアップカレッジ

業務で使えるライブラリ——pandas・openpyxl・requests の入口

レッスン7:業務で使えるライブラリ——pandas・openpyxl・requests の入口

このレッスンで学ぶこと

  • pandas の概観(表データを Python で扱う発想)を理解する
  • openpyxl で Excel ファイルを直接読み書きする方法を学ぶ
  • requests で Web API を叩く(GET と JSON 受け取り、認証の基本)方法を学ぶ
  • 3 つのライブラリを組み合わせた業務自動化スクリプトの組み立て方を理解する
  • ライブラリを「読む」発想(ドキュメントとの付き合い方)を身につける

前回のレッスンで、ファイル入出力と例外処理を扱いました。ここまでで言語の基礎は一通り揃いました。本レッスンでは、Python の真の威力——外部ライブラリの世界——の入口に立ちます。本コースで取り上げるのは、業務でもっとも使われる 3 つ:表データの pandas、Excel ファイルの openpyxl、Web API の requests。すべてを完全に習得するのではなく、「何ができるか」「どう書き始めるか」を体験し、自分の業務に持ち帰る形を目指します。

外部ライブラリとは

これまでのレッスンで使ってきた mathcsvjson などは、Python に最初から含まれている「標準ライブラリ」でした。本レッスンで扱うのは、Python とは別に開発され、必要に応じてインストールして使う「外部ライブラリ」です。

インストールの一般像

外部ライブラリは pip というツールでインストールします(詳しくは次のレッスン 8 で扱います)。

pip install pandas
pip install openpyxl
pip install requests

Google Colab を使っている方は、これらのライブラリは多くがあらかじめインストール済みで、すぐ import できます。

💡 ポイント 標準ライブラリは Python に最初から付いてくる、外部ライブラリは別途インストールが必要です。Google Colab を使うと、主要な外部ライブラリは最初から使える状態になっています。

pandas——表データを Python で扱う

pandas(パンダス)は、Excel のような「表データ」を Python の中で扱うためのライブラリです。Wes McKinney が 2008 年に開発を始め、2009 年に最初のバージョンを公開しました。データ分析の文脈で、いまや世界標準のライブラリです。

import の慣習

import pandas as pd

pandas as pd が業界の慣習です。本レッスン以降、pd. で pandas の機能を呼び出します。

DataFrame——pandas の主役

pandas の主役は「DataFrame」(データフレーム)と呼ばれる、Excel の表に近いデータ構造です。

import pandas as pd

data = {
    "name": ["山田", "鈴木", "佐藤", "高橋"],
    "score": [85, 72, 91, 68],
    "department": ["営業", "開発", "営業", "開発"],
}
df = pd.DataFrame(data)
print(df)

出力:

   name  score department
0    山田     85         営業
1    鈴木     72         開発
2    佐藤     91         営業
3    高橋     68         開発

行に「インデックス」(0、1、2、3)、列に「名前」(name、score、department)が付いた表になります。

CSV を読み込む——read_csv

df = pd.read_csv("sales.csv", encoding="utf-8")
print(df.head())  # 最初の 5 行を表示
print(df.tail())  # 最後の 5 行を表示
print(df.shape)   # (行数, 列数)

CSV ファイルを pd.read_csv() で読むと、自動的に DataFrame になります。前回のレッスンの csv.DictReader より、表全体を一度に扱えるのが特徴です。

集計・抽出の基本

# 列を取り出す
print(df["name"])

# 条件で抽出
print(df[df["score"] >= 80])

# 列の合計・平均
print(df["score"].sum())     # 合計
print(df["score"].mean())    # 平均

# グループごとの集計
print(df.groupby("department")["score"].mean())

最後の groupby は、Excel のピボットテーブルに相当する処理が 1 行で書けるのが圧巻です。

Excel に書き出す

df.to_excel("output.xlsx", index=False)

to_excel で、結果を Excel ファイルとして書き出せます。index=False で、左端のインデックス列を出さない設定にできます。

pandas の守備範囲

本コースで扱うのは「pandas で何ができるかの入口」です。pandas は機能が膨大で、本格的な活用には専用の学習が必要です。本コースを修了されたあとの学習方向(次のレッスン 8 で案内)として、pandas の専門書や公式ドキュメントに進むことを推奨します。

💡 ポイント pandas は表データを Python で扱うライブラリ。pd.DataFrame が主役で、read_csvto_excel・条件抽出・groupby 集計の 4 つを覚えると、業務での「Excel ではつらい量の処理」の多くが書けます。

openpyxl——Excel ファイルを直接操作する

pandas は「表データの計算」に強いライブラリですが、Excel ファイル独特の要素(セルの書式、複数シート、グラフ、数式)を細かく操作するには、openpyxl のほうが向きます。

import

from openpyxl import load_workbook, Workbook

Workbook は新規ブックを作るとき、load_workbook は既存ブックを開くときに使います。

既存ブックを開いて、セルを読む

from openpyxl import load_workbook

wb = load_workbook("sales.xlsx")
ws = wb.active   # アクティブなシート(最初のシート)

# セルを読む
print(ws["A1"].value)   # A1 セルの値
print(ws.cell(row=2, column=3).value)   # 2 行 3 列(C2 セル)

# 範囲を読む
for row in ws["A1":"C10"]:
    for cell in row:
        print(cell.value, end="\t")
    print()

既存ブックを編集して保存

from openpyxl import load_workbook

wb = load_workbook("sales.xlsx")
ws = wb.active

# セルを書き換える
ws["A1"] = "合計"
ws["B1"] = "=SUM(B2:B100)"   # Excel の数式も書ける

# シートを追加
ws2 = wb.create_sheet("集計")
ws2["A1"] = "集計結果"

# 保存
wb.save("sales_updated.xlsx")

save() を呼ぶまで、ファイルは変更されません。元のファイルを残したい場合は別名で保存します。

新規ブックを作る

from openpyxl import Workbook

wb = Workbook()
ws = wb.active
ws.title = "売上一覧"

# データを書く
ws.append(["名前", "売上"])
ws.append(["山田", 1000])
ws.append(["鈴木", 2500])
ws.append(["佐藤", 1800])

wb.save("new_sales.xlsx")

append で 1 行ずつデータを追加できます。リスト辞書append に渡す形が業務で多く使われます。

pandas との使い分け

やりたいこと 適切なライブラリ
大量データの集計・抽出 pandas
Excel の書式(色・フォント)を設定 openpyxl
Excel の数式を書き込む openpyxl
複数シートを管理 openpyxl(or pandas でも可)
グラフを追加 openpyxl

実務では、pandas で計算して、最後の体裁を openpyxl で整える、という組み合わせも多用されます。

💡 ポイント openpyxl は Excel ファイルそのものを操作するライブラリ。load_workbookWorkbook、シート操作、セル単位の読み書き、save が基本。pandas との使い分けの目安は「計算は pandas、書式と数式は openpyxl」。

requests——Web API を叩く

業務で「Web 上のサービスからデータを取得する」「外部システムにデータを送る」場面が増えています。requests(リクエスツ)は、Python から HTTP リクエストを送るための定番ライブラリです。Kenneth Reitz が 2011 年に公開し、Python の HTTP クライアントの事実上の標準として広く使われています。

import

import requests

GET——Web ページや API からデータを取る

もっとも基本的なのが GET リクエストです。

import requests

response = requests.get("https://api.example.com/users")
print(response.status_code)   # 200 など、HTTP のステータスコード
print(response.text)          # 応答の本文(文字列)

status_code200 ならば成功、404 ならば見つからない、500 ならばサーバーエラー、というのが HTTP の基本約束ごとです。

JSON で応答を受け取る

多くの API は JSON 形式で応答を返します。

import requests

response = requests.get("https://api.example.com/users")
if response.status_code == 200:
    data = response.json()    # JSON を Python の辞書/リストに変換
    for user in data:
        print(user["name"])
else:
    print(f"エラー: {response.status_code}")

response.json() で、応答の JSON を Python の辞書/リストに変換できます。前回のレッスンで扱った json.loads() を、requests が自動でやってくれます。

パラメータ付きの GET

URL に検索条件などを付ける場合、params 引数で渡します。

import requests

response = requests.get(
    "https://api.example.com/search",
    params={"q": "Python", "limit": 10},
)

これで https://api.example.com/search?q=Python&limit=10 というリクエストになります。

POST——データを送る

データを送るときは POST を使います。

import requests

data = {"name": "山田", "score": 85}
response = requests.post("https://api.example.com/users", json=data)
print(response.status_code)

json=data で、辞書を JSON として送信します。

認証——API キー

業務で使う API の多くは、認証が必要です。代表的な方法が「API キーをヘッダーに付ける」です。

import requests

headers = {"Authorization": "Bearer YOUR_API_KEY"}
response = requests.get(
    "https://api.example.com/private",
    headers=headers,
)

API キーをコードに直接書くのは、社内ルールや情報漏洩の観点から避けるべきです(次のレッスン 8 で、環境変数を使う方法に触れます)。

タイムアウトと例外処理

import requests

try:
    response = requests.get(
        "https://api.example.com/users",
        timeout=10,    # 10 秒で応答がなければ打ち切る
    )
    response.raise_for_status()   # ステータス 4xx・5xx で例外を投げる
    data = response.json()
    print(data)
except requests.exceptions.Timeout:
    print("タイムアウトしました")
except requests.exceptions.HTTPError as e:
    print(f"HTTP エラー: {e}")
except requests.exceptions.RequestException as e:
    print(f"通信エラー: {e}")

業務で Web API を使うときは、タイムアウトと例外処理を必ず入れます。ネットワークの不調、サーバーの停止、過大な応答時間など、「相手側で起こりうること」に備える発想です。

💡 ポイント requests は Web API を叩くライブラリ。requests.get(url) で GET、response.json() で JSON 変換、headers で認証、params でクエリ、timeout でタイムアウト、raise_for_status() でエラー検出が定番です。

3 つを組み合わせる——業務自動化スクリプトの骨格

3 つのライブラリを組み合わせると、業務自動化の典型パターンが書けます。

例:Web から取得して、加工して、Excel に出す

import requests
import pandas as pd
from openpyxl import load_workbook

# 1. Web API からデータ取得
response = requests.get("https://api.example.com/sales", timeout=10)
response.raise_for_status()
raw_data = response.json()

# 2. pandas で加工
df = pd.DataFrame(raw_data)
df["tax_included"] = (df["price"] * 1.1).astype(int)
summary = df.groupby("region")["tax_included"].sum()

# 3. Excel に出力(テンプレートに書き込む)
wb = load_workbook("template.xlsx")
ws = wb["集計"]
for i, (region, total) in enumerate(summary.items(), start=2):
    ws.cell(row=i, column=1, value=region)
    ws.cell(row=i, column=2, value=int(total))
wb.save("output.xlsx")

print("完了しました")

たった 20 行ほどのスクリプトで、「Web から取得 → 加工 → Excel に出力」が完結します。これを毎月手作業でやれば 3 時間かかる作業が、Python で数秒。これが、業務自動化の威力です。

業務自動化スクリプトの基本構造

業務で書くスクリプトには、共通の骨格があります。

# 1. インポート
import ...

# 2. 設定値(定数)
INPUT_FILE = "data.csv"
OUTPUT_FILE = "result.xlsx"
API_URL = "https://api.example.com/..."

# 3. 関数群
def load_data():
    ...

def transform(data):
    ...

def save_result(result):
    ...

# 4. メイン処理
def main():
    data = load_data()
    result = transform(data)
    save_result(result)
    print("完了")

if __name__ == "__main__":
    main()

設定値は冒頭に集める、関数で 1 つずつの仕事に分ける、main() で全体の流れを書く——というのが、業務スクリプトの読みやすい型です。if __name__ == "__main__": は「このファイルが直接実行されたときだけ main() を呼ぶ」というイディオムです。

💡 ポイント 業務自動化スクリプトの基本構造は「インポート → 設定値 → 関数群 → メイン処理 → if __name__ == "__main__":」。設定値は冒頭、処理は関数に分け、main() で流れを書くと、長く保守できるスクリプトになります。

ライブラリを「読む」発想

pandas も openpyxl も requests も、それぞれ独立した本が 1 冊書けるほど機能があります。本コースでは入口だけを案内しました。修了後に深く使うには、「公式ドキュメントを読む」「サンプルコードを試す」「自分の業務に当てはめる」を繰り返す必要があります。

公式ドキュメントを読むコツ

  • まず「Tutorial」「Getting Started」を読む
  • 次に「User Guide」を斜め読みする
  • 必要になったら「API Reference」を辞書のように引く

AI と一緒に読む

2026 年現在、ChatGPT・Claude・Gemini などの生成 AI に「pandas で月次の集計をするコードを書いて」と頼むと、たたき台が手に入ります。ただし、AI が出力したコードを「そのままコピペ」するのではなく、「読んで理解し、自分の業務に合わせて直す」のが推奨です。本コースで身につけた言語基礎が、AI と一緒に Python を読むときの「読める手」になります。

サンプルコードから自分の業務へ

新しいライブラリを覚えるとき、サンプルコードを動かすところから始め、少しずつ自分の業務データに置き換えていくと、習得が早くなります。「いきなり本番データで」「いきなり本格スクリプトで」を避け、「小さく書く」「小さく試す」を繰り返します。

💡 ポイント ライブラリは「全機能を暗記」するものではなく「読む」道具です。公式ドキュメントを段階的に読み、AI と一緒にコードを読み、サンプルから自分の業務へ少しずつ広げる発想を、修了後も持ち続けます。

講師の現場メモ:「20 行のスクリプトが、3 時間の手作業を 8 秒に変えた火曜日」

私(平野)が、独立して 2 年目に支援した、地方の中堅商社(社員 70 名)での経験です。経営企画部の担当者の方が、毎月初めに 3 時間かかって作っていたレポートがありました。

作業の中身はこうです。

  1. 社内の販売管理システムから先月のデータを CSV でダウンロード
  2. Excel で開いて、Shift_JIS のエンコーディングを確認
  3. 不要な列を削除、列の並びを整理
  4. 顧客マスタ(別の Excel ファイル)と顧客 ID をキーに突合
  5. 顧客カテゴリ別に集計(小売・卸売・直販の 3 区分)
  6. 部署別の月次レポートに数字を貼り付け
  7. 上司にメール送信

「毎月最初の半日が、この作業で潰れます。ミスもときどき起こります」と、担当者の方は困っていました。

私は社員 3 人と一緒に、Python のスクリプトを書きました。

# 1. 設定値
SOURCE_CSV = "data/sales_202606.csv"
MASTER_XLSX = "data/customer_master.xlsx"
TEMPLATE_XLSX = "template/monthly_report.xlsx"
OUTPUT_XLSX = "output/monthly_report_202606.xlsx"

# 2. 必要なライブラリ
import pandas as pd
from openpyxl import load_workbook

def main():
    # 3. CSV を読む(Shift_JIS)
    sales = pd.read_csv(SOURCE_CSV, encoding="cp932")

    # 4. 顧客マスタを読む
    master = pd.read_excel(MASTER_XLSX, sheet_name="customer")

    # 5. 突合(マージ)
    merged = pd.merge(sales, master, on="customer_id", how="left")

    # 6. カテゴリ別集計
    summary = merged.groupby("category")["amount"].sum()

    # 7. テンプレートに書き込む
    wb = load_workbook(TEMPLATE_XLSX)
    ws = wb["集計"]
    ws["B2"] = int(summary.get("小売", 0))
    ws["B3"] = int(summary.get("卸売", 0))
    ws["B4"] = int(summary.get("直販", 0))

    # 8. 保存
    wb.save(OUTPUT_XLSX)
    print(f"完了: {OUTPUT_XLSX}")

if __name__ == "__main__":
    main()

これだけです。30 行ほどのコードで、3 時間の作業が 8 秒に。担当者の方は、最初に動かしたときの表情を、私はいまも覚えています。「これで本当にできているんですか」と、3 回ほど自分で結果を確認していました。

その後、メール送信の自動化も追加し、毎月の作業は「スクリプトをダブルクリック」で 30 秒以内に終わるようになりました。担当者の方は、その時間を顧客分析や次の戦略立案に充てるようになりました。

このときに私が感じたのは、Python の威力は「すごい新機能」ではなく「3 時間の繰り返し業務を 30 秒にする」という地味な変化にある、ということです。pandas で集計、openpyxl でテンプレート書き込み、requests でメール送信——どれも本コースで紹介した範囲の入口にすぎません。けれども、組み合わせるだけで、業務の景色が変わります。

本コースで pandas・openpyxl・requests を扱うのは、皆さんに「3 つの入口を知って、自分の業務に組み合わせる経験」を持ち帰ってほしいからです。最初の 1 本は、誰かのスクリプトの真似でも構いません。動かして、少しずつ変えて、自分の業務に合わせていく——その先に、業務の景色が変わる瞬間が必ず来ます。

まとめ

このレッスンでは、以下のことを学びました。

  • 外部ライブラリは標準ライブラリと別途インストール(pip install で)が必要。Google Colab には主要なライブラリが入っている
  • pandas:表データを DataFrame で扱うライブラリ。read_csv・条件抽出・groupbyto_excel が業務での 4 大基本
  • openpyxl:Excel ファイル独自の要素(書式・数式・複数シート・グラフ)を扱うライブラリ。load_workbookWorkbook、セル操作、save が基本
  • pandas と openpyxl の使い分け:計算は pandas、書式と数式は openpyxl。組み合わせて使うのが業務での定番
  • requests:Web API を叩くライブラリ。requests.getrequests.postresponse.json()headersparamstimeoutraise_for_status が基本
  • 3 つを組み合わせた業務自動化スクリプトの基本構造:「インポート → 設定値 → 関数群 → メイン処理 → if __name__ == "__main__":
  • ライブラリは全機能を暗記するのではなく「読む」道具。公式ドキュメント、AI との対話、サンプルからの拡張を組み合わせる

次のレッスンでは、本コースの締めくくりとして、仮想環境pipPEP 8・AI 駆動開発・修了後の学習方向を扱います。Python と長く付き合うための姿勢を、皆さんに持ち帰っていただきます。


確認クイズ

このレッスンの理解度をチェックしましょう。