Python Excel操作 逆引き集 | 特定シートだけ読み込む

Python
スポンサーリンク

Pythonで特定シートだけ読み込む入門 — pandas.read_excel(sheet_name=’Sheet1′)

Excelブックの「このシートだけ!」を確実に読み込む方法を、初心者向けにやさしく解説します。すぐに動くコード、帳票向けテンプレート、練習問題までまとめました。


基本の使い方

import pandas as pd

# "sample.xlsx" の "Sheet1" だけ読み込む
df = pd.read_excel("sample.xlsx", sheet_name="Sheet1")

print(df.head())  # 先頭5行で中身確認
print(df.info())  # 列名・型の確認
Python
  • ポイント: sheet_name に読みたいシート名(または番号)を指定します。番号は 0 が先頭シートです。
  • 注意: シート名は完全一致が必要です。末尾の空白や全角半角の違いに気をつけましょう。

よく使う引数と組み合わせ

import pandas as pd

df = pd.read_excel(
    "report.xlsx",
    sheet_name="明細",      # 読むシート名
    usecols=["日付", "商品名", "金額(円)"],  # 欲しい列だけ
    skiprows=5,            # 先頭の説明行をスキップ
    header=0,              # スキップ後の行をヘッダーとして使う
    dtype={"商品コード": "string"},     # 型を固定(先頭ゼロ保持など)
    parse_dates=["日付"],  # 日付列をdatetimeに
    na_values=["-", "不明"] # 特定文字を欠損扱いに
)

print(df.head())
Python
  • シート指定の別形: # 先頭シートを番号で指定 df = pd.read_excel("report.xlsx", sheet_name=0)
  • 列範囲の指定: # A〜F列をまとめて読み込み df = pd.read_excel("report.xlsx", sheet_name="明細", usecols="A:F")

実践テンプレート

帳票のタイトルや注記を飛ばして、見出し行から読む

import pandas as pd

df = pd.read_excel(
    "monthly.xlsx",
    sheet_name="集計",
    skiprows=6,   # 7行目からが表
    header=0,
    usecols="B:G" # 欲しい範囲だけ
)

# 軽い整形
df = df.rename(columns=lambda c: str(c).strip())
for col in df.select_dtypes(include="object"):
    df[col] = df[col].str.strip()

print(df.head())
Python

コード類の先頭ゼロを守りつつ、数値列は数値に

import pandas as pd

df = pd.read_excel(
    "orders.xlsx",
    sheet_name="明細",
    dtype={"注文番号": "string", "顧客ID": "string"},
    parse_dates=["注文日"],
    usecols=["注文番号", "顧客ID", "注文日", "数量", "金額"]
)

df["数量"] = pd.to_numeric(df["数量"], errors="coerce")
df["金額"] = pd.to_numeric(df["金額"], errors="coerce")
print(df.info())
Python

シート名をタグとして列に残す(後で識別に使う)

import pandas as pd

name = "2025_Q2"
df = pd.read_excel("sales.xlsx", sheet_name=name, usecols=["Date", "Product", "Revenue"], parse_dates=["Date"])
df["sheet"] = name

print(df.head())
Python

つまずきやすいポイントと回避策

  • シート名の誤記:
    対策: まずシート名を列挙して確認。
import pandas as pd
xls = pd.ExcelFile("file.xlsx")
print(xls.sheet_names)  # ['Sheet1', '明細', '集計'] など
Python
  • 先頭ゼロが消える(郵便番号・コード):
    対策: dtype={"列名": "string"} を指定して文字列固定。
  • 日付が文字列のまま・混在:
    対策: parse_dates=["日付"] または後処理で pd.to_datetime(..., errors="coerce")
  • 不要な説明行・空白列が混ざる:
    対策: skiprowsusecols で読み込み段階から削る。
  • 拡張子に合うエンジンがない:
    対策: .xlsxpip install openpyxl、古い .xlspip install xlrd

ミニ例題(手を動かして慣れる)

例題1:特定シートの必要列だけ読み込んで先頭10行表示

  • 課題: sales.xlsx2025_Q3 シートから「Date, Product, Revenue」を読み、先頭10行を表示。
import pandas as pd
df = pd.read_excel("sales.xlsx", sheet_name="2025_Q3", usecols=["Date", "Product", "Revenue"])
print(df.head(10))
Python

例題2:説明行スキップ+列名を自分で付ける

  • 課題: report.xlsx明細 シートは先頭4行が説明。5行目からデータで、列名を ["date","item","qty","price"] にしたい。
import pandas as pd
df = pd.read_excel("report.xlsx", sheet_name="明細", skiprows=4, header=None, names=["date","item","qty","price"])
print(df.info())
Python

例題3:文字列コード保持+月別合計を集計

  • 課題: orders.xlsx集計 シートから OrderID を文字列、OrderDate を日付、Amount を数値にして月別合計を計算。
import pandas as pd

df = pd.read_excel(
    "orders.xlsx",
    sheet_name="集計",
    dtype={"OrderID": "string"},
    parse_dates=["OrderDate"],
    usecols=["OrderID", "OrderDate", "Amount"]
)
df["Amount"] = pd.to_numeric(df["Amount"], errors="coerce")

monthly = (
    df.assign(month=df["OrderDate"].dt.to_period("M"))
      .groupby("month", as_index=False)["Amount"].sum()
)
print(monthly)
Python
タイトルとURLをコピーしました